BAL and Maple Release 2.2

Signed-off-by: Shad Ansari <developer@Carbon.local>
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