/*
<: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_ */
