BAL and Maple Release 2.2
Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/bal_release/src/lib/libobjmsg/Makefile b/bal_release/src/lib/libobjmsg/Makefile
new file mode 100644
index 0000000..15ff2d9
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/Makefile
@@ -0,0 +1,37 @@
+###############################################################################
+#
+# <:copyright-BRCM:2016:DUAL/GPL:standard
+#
+# Copyright (c) 2016 Broadcom
+# All Rights Reserved
+#
+# Unless you and Broadcom execute a separate written software license
+# agreement governing use of this software, this software is licensed
+# to you under the terms of the GNU General Public License version 2
+# (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+# with the following added to such license:
+#
+# As a special exception, the copyright holders of this software give
+# you permission to link this software with independent modules, and
+# to copy and distribute the resulting executable under terms of your
+# choice, provided that you also meet, for each linked independent
+# module, the terms and conditions of the license of that module.
+# An independent module is a module which is not derived from this
+# software. The special exception does not apply to any modifications
+# of the software.
+#
+# Not withstanding the above, under no circumstances may you combine
+# this software in any way with any other Broadcom software provided
+# under a license other than the GPL, without Broadcom's express prior
+# written consent.
+#
+# :>
+#
+###############################################################################
+MOD_NAME = balobjmsg
+MOD_TYPE = lib
+MOD_DEPS = common_include utils maple_sdk dev_log
+
+gen_bal_hdrs = bal_model_funcs.h bal_obj_msg_pack_unpack.h
+gen_bal_srcs = bal_model_funcs.c bal_obj_msg_pack_unpack.c
+srcs = bal_msg.c
diff --git a/bal_release/src/lib/libobjmsg/bal_model_funcs.c b/bal_release/src/lib/libobjmsg/bal_model_funcs.c
new file mode 100644
index 0000000..262999f
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_model_funcs.c
@@ -0,0 +1,11384 @@
+#include <bcmos_system.h>
+#include "bal_model_funcs.h"
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_id_pack(bcmbal_access_terminal_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_id_unpack(bcmbal_access_terminal_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_id_pack(bcmbal_access_terminal_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_id_unpack(bcmbal_access_terminal_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_id_pack(bcmbal_access_terminal_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_id_unpack(bcmbal_access_terminal_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_id_pack(bcmbal_action_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_id_unpack(bcmbal_action_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_cmd_id_pack(bcmbal_action_cmd_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_cmd_id_unpack(bcmbal_action_cmd_id *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_id_pack(bcmbal_classifier_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_id_unpack(bcmbal_classifier_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_pkt_tag_type_pack(bcmbal_pkt_tag_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_pkt_tag_type_unpack(bcmbal_pkt_tag_type *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_control_pack(bcmbal_control this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_control_unpack(bcmbal_control *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_type_pack(bcmbal_dest_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_type_unpack(bcmbal_dest_type *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_ds_miss_mode_pack(bcmbal_ds_miss_mode this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_ds_miss_mode_unpack(bcmbal_ds_miss_mode *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_extra_bw_eligibility_type_pack(bcmbal_extra_bw_eligibility_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_extra_bw_eligibility_type_unpack(bcmbal_extra_bw_eligibility_type *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_id_pack(bcmbal_flow_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_id_unpack(bcmbal_flow_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_id_pack(bcmbal_flow_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_id_unpack(bcmbal_flow_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_id_pack(bcmbal_flow_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_id_unpack(bcmbal_flow_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_id_pack(bcmbal_flow_stat_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_id_unpack(bcmbal_flow_stat_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_type_pack(bcmbal_flow_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_type_unpack(bcmbal_flow_type *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_id_pack(bcmbal_group_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_id_unpack(bcmbal_group_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_id_pack(bcmbal_group_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_id_unpack(bcmbal_group_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_cmd_pack(bcmbal_group_member_cmd this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_cmd_unpack(bcmbal_group_member_cmd *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_owner_pack(bcmbal_group_owner this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_owner_unpack(bcmbal_group_owner *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_id_pack(bcmbal_interface_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_id_unpack(bcmbal_interface_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_id_pack(bcmbal_interface_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_id_unpack(bcmbal_interface_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_id_pack(bcmbal_interface_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_id_unpack(bcmbal_interface_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_id_pack(bcmbal_interface_stat_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_id_unpack(bcmbal_interface_stat_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_intf_type_pack(bcmbal_intf_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_intf_type_unpack(bcmbal_intf_type *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_iwf_mode_pack(bcmbal_iwf_mode this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_iwf_mode_unpack(bcmbal_iwf_mode *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_id_pack(bcmbal_packet_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_id_unpack(bcmbal_packet_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_id_pack(bcmbal_packet_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_id_unpack(bcmbal_packet_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_id_pack(bcmbal_packet_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_id_unpack(bcmbal_packet_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_id_pack(bcmbal_sla_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_id_unpack(bcmbal_sla_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_state_pack(bcmbal_state this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_state_unpack(bcmbal_state *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_status_pack(bcmbal_status this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_status_unpack(bcmbal_status *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_pack(bcmbal_subscriber_terminal_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_unpack(bcmbal_subscriber_terminal_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_id_pack(bcmbal_subscriber_terminal_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_id_unpack(bcmbal_subscriber_terminal_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_id_pack(bcmbal_subscriber_terminal_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_id_unpack(bcmbal_subscriber_terminal_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_id_pack(bcmbal_subscriber_terminal_stat_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_id_unpack(bcmbal_subscriber_terminal_stat_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_type_pack(bcmbal_tm_bac_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_type_unpack(bcmbal_tm_bac_type *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_creation_mode_pack(bcmbal_tm_creation_mode this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_creation_mode_unpack(bcmbal_tm_creation_mode *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_id_pack(bcmbal_tm_queue_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_id_unpack(bcmbal_tm_queue_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_id_pack(bcmbal_tm_queue_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_id_unpack(bcmbal_tm_queue_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_id_pack(bcmbal_tm_queue_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_id_unpack(bcmbal_tm_queue_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_id_pack(bcmbal_tm_queue_stat_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_id_unpack(bcmbal_tm_queue_stat_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_id_pack(bcmbal_tm_sched_cfg_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_id_unpack(bcmbal_tm_sched_cfg_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_child_type_pack(bcmbal_tm_sched_child_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_child_type_unpack(bcmbal_tm_sched_child_type *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_dir_pack(bcmbal_tm_sched_dir this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_dir_unpack(bcmbal_tm_sched_dir *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_id_pack(bcmbal_tm_sched_ind_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_id_unpack(bcmbal_tm_sched_ind_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_id_pack(bcmbal_tm_sched_key_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u16(buf, (uint16_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_id_unpack(bcmbal_tm_sched_key_id *this, bcmbal_buf *buf)
+{
+ uint16_t num_val;
+ if (!bcmbal_buf_read_u16(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_type_pack(bcmbal_tm_sched_owner_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_type_unpack(bcmbal_tm_sched_owner_type *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_pack(bcmbal_tm_sched_owner_agg_port_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_unpack(bcmbal_tm_sched_owner_agg_port_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_id_pack(bcmbal_tm_sched_parent_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_id_unpack(bcmbal_tm_sched_parent_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_type_pack(bcmbal_tm_sched_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u8(buf, (uint8_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_type_unpack(bcmbal_tm_sched_type *this, bcmbal_buf *buf)
+{
+ uint8_t num_val;
+ if (!bcmbal_buf_read_u8(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_id_pack(bcmbal_tm_shaping_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_id_unpack(bcmbal_tm_shaping_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_id_pack(bcmbal_tm_tcont_sla_id this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u64(buf, (uint64_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_id_unpack(bcmbal_tm_tcont_sla_id *this, bcmbal_buf *buf)
+{
+ uint64_t num_val;
+ if (!bcmbal_buf_read_u64(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_trx_type_pack(bcmbal_trx_type this, bcmbal_buf *buf)
+{
+ return bcmbal_buf_write_u32(buf, (uint32_t) this);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_trx_type_unpack(bcmbal_trx_type *this, bcmbal_buf *buf)
+{
+ uint32_t num_val;
+ if (!bcmbal_buf_read_u32(buf, &num_val))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *this = num_val;
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_action_set_default(bcmbal_action *this)
+{
+ this->presence_mask = (bcmbal_action_id) 0;
+ this->cmds_bitmask = (bcmbal_action_cmd_id) 0;
+ this->o_vid = 0;
+ this->o_pbits = 0;
+ this->o_tpid = 0;
+ this->i_vid = 0;
+ this->i_pbits = 0;
+ this->i_tpid = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_pack(const bcmbal_action *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_action_id_pack(this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_action_cmd_id_pack(this->cmds_bitmask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->o_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->o_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->o_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->i_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->i_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->i_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_action_get_packed_length(const bcmbal_action *this)
+{
+ uint32_t count = 8;
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+ {
+ count += 2;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_unpack(bcmbal_action *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_action_id_unpack(&this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_action_cmd_id_unpack(&this->cmds_bitmask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->o_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->o_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->o_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->i_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->i_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->i_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_action_id presence_mask;
+ if (!bcmbal_action_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0020) == 0x0020))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0040) == 0x0040))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_action_bounds_check(const bcmbal_action *this)
+{
+ if ((this->presence_mask & 0xFFFFFFFFFFFFFF80ULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if ((this->cmds_bitmask & 0xFFFFE000UL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_aggregation_port_id_list_u8_set_default(bcmbal_aggregation_port_id_list_u8 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_pack(const bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_write_u8(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_aggregation_port_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_aggregation_port_id_list_u8_get_packed_length(const bcmbal_aggregation_port_id_list_u8 *this)
+{
+ return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_unpack(bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_read_u8(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_aggregation_port_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_aggregation_port_id *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_aggregation_port_id));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint8_t len;
+ if (!bcmbal_buf_read_u8(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_aggregation_port_id) * len);
+ if (!bcmbal_buf_skip(packed, len * 2))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_aggregation_port_id_list_u8_bounds_check(const bcmbal_aggregation_port_id_list_u8 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_classifier_set_default(bcmbal_classifier *this)
+{
+ this->presence_mask = (bcmbal_classifier_id) 0;
+ this->o_tpid = 0;
+ this->o_vid = 0;
+ this->i_tpid = 0;
+ this->i_vid = 0;
+ this->o_pbits = 0;
+ this->i_pbits = 0;
+ this->ether_type = 0;
+ bcmos_mac_address_init(&this->dst_mac);
+ bcmos_mac_address_init(&this->src_mac);
+ this->ip_proto = 0;
+ bcmos_ipv4_address_init(&this->dst_ip);
+ bcmos_ipv4_address_init(&this->src_ip);
+ this->src_port = 0;
+ this->dst_port = 0;
+ this->pkt_tag_type = (bcmbal_pkt_tag_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_pack(const bcmbal_classifier *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_classifier_id_pack(this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->o_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->o_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->i_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->i_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->o_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->i_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->ether_type))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0080) == 0x0080))
+ {
+ if (!bcmbal_buf_write_mac_address(buf, this->dst_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0100) == 0x0100))
+ {
+ if (!bcmbal_buf_write_mac_address(buf, this->src_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0200) == 0x0200))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->ip_proto))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0400) == 0x0400))
+ {
+ if (!bcmbal_buf_write_ipv4_address(buf, this->dst_ip))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0800) == 0x0800))
+ {
+ if (!bcmbal_buf_write_ipv4_address(buf, this->src_ip))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x1000) == 0x1000))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->src_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x2000) == 0x2000))
+ {
+ if (!bcmbal_buf_write_u16(buf, this->dst_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+ {
+ if (!bcmbal_pkt_tag_type_pack(this->pkt_tag_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_classifier_get_packed_length(const bcmbal_classifier *this)
+{
+ uint32_t count = 8;
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0080) == 0x0080))
+ {
+ count += 6;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0100) == 0x0100))
+ {
+ count += 6;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0200) == 0x0200))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0400) == 0x0400))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0800) == 0x0800))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x1000) == 0x1000))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x2000) == 0x2000))
+ {
+ count += 2;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_unpack(bcmbal_classifier *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_classifier_id_unpack(&this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->o_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->o_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->i_tpid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->i_vid))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->o_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0020) == 0x0020))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->i_pbits))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0040) == 0x0040))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->ether_type))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0080) == 0x0080))
+ {
+ if (!bcmbal_buf_read_mac_address(buf, &this->dst_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0100) == 0x0100))
+ {
+ if (!bcmbal_buf_read_mac_address(buf, &this->src_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0200) == 0x0200))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->ip_proto))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0400) == 0x0400))
+ {
+ if (!bcmbal_buf_read_ipv4_address(buf, &this->dst_ip))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0800) == 0x0800))
+ {
+ if (!bcmbal_buf_read_ipv4_address(buf, &this->src_ip))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x1000) == 0x1000))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->src_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x2000) == 0x2000))
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->dst_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+ {
+ if (!bcmbal_pkt_tag_type_unpack(&this->pkt_tag_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_classifier_id presence_mask;
+ if (!bcmbal_classifier_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0020) == 0x0020))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0040) == 0x0040))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0080) == 0x0080))
+ {
+ if (!bcmbal_buf_skip(packed, 6))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0100) == 0x0100))
+ {
+ if (!bcmbal_buf_skip(packed, 6))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0200) == 0x0200))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0400) == 0x0400))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0800) == 0x0800))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x1000) == 0x1000))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x2000) == 0x2000))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x4000) == 0x4000))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_classifier_bounds_check(const bcmbal_classifier *this)
+{
+ if ((this->presence_mask & 0xFFFFFFFFFFFF8000ULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x4000) == 0x4000))
+ {
+ if ((this->pkt_tag_type & 0xFFFFFFF8UL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_dest_set_default(bcmbal_dest *this)
+{
+ this->type = (bcmbal_dest_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_pack(const bcmbal_dest *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_dest_type_pack(this->type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (this->type)
+ {
+ case BCMBAL_DEST_TYPE_NNI:
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.nni.int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_DEST_TYPE_SUB_TERM:
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.sub_term.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u16(buf, this->u.sub_term.sub_term_uni))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u16(buf, this->u.sub_term.int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_DEST_TYPE_HOST:
+ {
+ }
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_dest_get_packed_length(const bcmbal_dest *this)
+{
+ uint32_t count = 4;
+ switch (this->type)
+ {
+ case BCMBAL_DEST_TYPE_NNI:
+ {
+ count += 4;
+ }
+ break;
+ case BCMBAL_DEST_TYPE_SUB_TERM:
+ {
+ count += 8;
+ }
+ break;
+ case BCMBAL_DEST_TYPE_HOST:
+ {
+ }
+ break;
+ default:
+ break;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_unpack(bcmbal_dest *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_dest_type_unpack(&this->type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (this->type)
+ {
+ case BCMBAL_DEST_TYPE_NNI:
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.nni.int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_DEST_TYPE_SUB_TERM:
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.sub_term.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u16(buf, &this->u.sub_term.sub_term_uni))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u16(buf, &this->u.sub_term.int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_DEST_TYPE_HOST:
+ {
+ }
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_dest_type type;
+ if (!bcmbal_dest_type_unpack(&type, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (type)
+ {
+ case BCMBAL_DEST_TYPE_NNI:
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_DEST_TYPE_SUB_TERM:
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_DEST_TYPE_HOST:
+ {
+ }
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_dest_bounds_check(const bcmbal_dest *this)
+{
+ switch (this->type)
+ {
+ case BCMBAL_DEST_TYPE_NNI:
+ {
+ }
+ break;
+ case BCMBAL_DEST_TYPE_SUB_TERM:
+ {
+ }
+ break;
+ case BCMBAL_DEST_TYPE_HOST:
+ {
+ }
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_id_list_u32_set_default(bcmbal_flow_id_list_u32 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_pack(const bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf)
+{
+ uint32_t i0;
+ if (!bcmbal_buf_write_u32(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_flow_id_list_u32\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_id_list_u32_get_packed_length(const bcmbal_flow_id_list_u32 *this)
+{
+ return 4 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_unpack(bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint32_t i0;
+ if (!bcmbal_buf_read_u32(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_flow_id_list_u32\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_flow_id *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_flow_id));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint32_t len;
+ if (!bcmbal_buf_read_u32(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_flow_id) * len);
+ if (!bcmbal_buf_skip(packed, len * 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_id_list_u32_bounds_check(const bcmbal_flow_id_list_u32 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_ref_set_default(bcmbal_tm_queue_ref *this)
+{
+ this->sched_id = (bcmbal_tm_sched_id) 0;
+ this->queue_id = (bcmbal_tm_queue_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_pack(const bcmbal_tm_queue_ref *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sched_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->queue_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_unpack(bcmbal_tm_queue_ref *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sched_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->queue_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ (void)extra_mem;
+ return bcmbal_buf_skip(packed, 5);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ref_bounds_check(const bcmbal_tm_queue_ref *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_member_info_set_default(bcmbal_group_member_info *this)
+{
+ this->intf_id = (bcmbal_intf_id) 0;
+ this->svc_port_id = (bcmbal_service_port_id) 0;
+ this->action.presence_mask = (bcmbal_action_id) 0;
+ this->action.cmds_bitmask = (bcmbal_action_cmd_id) 0;
+ this->action.o_vid = 0;
+ this->action.o_pbits = 0;
+ this->action.o_tpid = 0;
+ this->action.i_vid = 0;
+ this->action.i_pbits = 0;
+ this->action.i_tpid = 0;
+ this->queue.sched_id = (bcmbal_tm_sched_id) 0;
+ this->queue.queue_id = (bcmbal_tm_queue_id) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_pack(const bcmbal_group_member_info *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_action_pack(&this->action, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_queue_ref_pack(&this->queue, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_member_info_get_packed_length(const bcmbal_group_member_info *this)
+{
+ return 11 + bcmbal_action_get_packed_length(&this->action);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_unpack(bcmbal_group_member_info *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_action_unpack(&this->action, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_queue_ref_unpack(&this->queue, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_action_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 5))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_bounds_check(const bcmbal_group_member_info *this)
+{
+ if (!bcmbal_action_bounds_check(&this->action))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_queue_ref_bounds_check(&this->queue))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_member_info_list_u16_set_default(bcmbal_group_member_info_list_u16 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_pack(const bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf)
+{
+ uint16_t i0;
+ if (!bcmbal_buf_write_u16(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_group_member_info_list_u16\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_group_member_info_pack(&this->val[i0], buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_member_info_list_u16_get_packed_length(const bcmbal_group_member_info_list_u16 *this)
+{
+ uint32_t count = 2;
+ uint32_t i0;
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"len\" of struct \"bcmbal_group_member_info_list_u16\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return 0;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ count += bcmbal_group_member_info_get_packed_length(&this->val[i0]);
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_unpack(bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint16_t i0;
+ if (!bcmbal_buf_read_u16(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_group_member_info_list_u16\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_group_member_info *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_group_member_info));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_group_member_info_unpack(&this->val[i0], buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint16_t len;
+ uint16_t i0;
+ if (!bcmbal_buf_read_u16(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_group_member_info) * len);
+ for (i0 = 0; i0 < len; i0++)
+ {
+ if (!bcmbal_group_member_info_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_member_info_list_u16_bounds_check(const bcmbal_group_member_info_list_u16 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_password_set_default(bcmbal_password *this)
+{
+ memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_pack(const bcmbal_password *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write(buf, this->arr, 10))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_unpack(bcmbal_password *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read(buf, this->arr, 10))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ (void)extra_mem;
+ return bcmbal_buf_skip(packed, 10);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_password_bounds_check(const bcmbal_password *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_registration_id_set_default(bcmbal_registration_id *this)
+{
+ memset(this->arr, 0, sizeof(this->arr));
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_pack(const bcmbal_registration_id *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write(buf, this->arr, 36))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_unpack(bcmbal_registration_id *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read(buf, this->arr, 36))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ (void)extra_mem;
+ return bcmbal_buf_skip(packed, 36);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_registration_id_bounds_check(const bcmbal_registration_id *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_serial_number_set_default(bcmbal_serial_number *this)
+{
+ memset(this->vendor_id, 0, sizeof(this->vendor_id));
+ memset(this->vendor_specific, 0, sizeof(this->vendor_specific));
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_pack(const bcmbal_serial_number *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write(buf, this->vendor_id, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write(buf, this->vendor_specific, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_unpack(bcmbal_serial_number *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read(buf, this->vendor_id, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read(buf, this->vendor_specific, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ (void)extra_mem;
+ return bcmbal_buf_skip(packed, 8);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_serial_number_bounds_check(const bcmbal_serial_number *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_service_port_id_list_u8_set_default(bcmbal_service_port_id_list_u8 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_pack(const bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_write_u8(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_service_port_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_service_port_id_list_u8_get_packed_length(const bcmbal_service_port_id_list_u8 *this)
+{
+ return 1 + (2 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_unpack(bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_read_u8(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_service_port_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_service_port_id *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_service_port_id));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint8_t len;
+ if (!bcmbal_buf_read_u8(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_service_port_id) * len);
+ if (!bcmbal_buf_skip(packed, len * 2))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_service_port_id_list_u8_bounds_check(const bcmbal_service_port_id_list_u8 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_sla_set_default(bcmbal_sla *this)
+{
+ this->presence_mask = (bcmbal_sla_id) 0;
+ this->min_rate = 0;
+ this->max_rate = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_pack(const bcmbal_sla *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_sla_id_pack(this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_write_u32(buf, this->min_rate))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u32(buf, this->max_rate))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_sla_get_packed_length(const bcmbal_sla *this)
+{
+ uint32_t count = 8;
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_unpack(bcmbal_sla *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_sla_id_unpack(&this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->min_rate))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->max_rate))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_sla_id presence_mask;
+ if (!bcmbal_sla_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sla_bounds_check(const bcmbal_sla *this)
+{
+ if ((this->presence_mask & 0xFFFFFFFFFFFFFFFCULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_sub_id_list_u16_set_default(bcmbal_sub_id_list_u16 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_pack(const bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf)
+{
+ uint16_t i0;
+ if (!bcmbal_buf_write_u16(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_sub_id_list_u16\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_sub_id_list_u16_get_packed_length(const bcmbal_sub_id_list_u16 *this)
+{
+ return 2 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_unpack(bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint16_t i0;
+ if (!bcmbal_buf_read_u16(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_sub_id_list_u16\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_sub_id *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_sub_id));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint16_t len;
+ if (!bcmbal_buf_read_u16(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_sub_id) * len);
+ if (!bcmbal_buf_skip(packed, len * 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_sub_id_list_u16_bounds_check(const bcmbal_sub_id_list_u16 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_red_set_default(bcmbal_tm_red *this)
+{
+ this->min_threshold = (bcmbal_percent) 0;
+ this->max_threshold = (bcmbal_percent) 0;
+ this->max_probability = (bcmbal_percent) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_pack(const bcmbal_tm_red *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->min_threshold))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->max_threshold))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->max_probability))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_unpack(bcmbal_tm_red *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->min_threshold))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->max_threshold))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->max_probability))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ (void)extra_mem;
+ return bcmbal_buf_skip(packed, 3);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_red_bounds_check(const bcmbal_tm_red *this)
+{
+ if (this->min_threshold > (bcmbal_percent) 100)
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (this->max_threshold > (bcmbal_percent) 100)
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (this->max_probability > (bcmbal_percent) 100)
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_bac_set_default(bcmbal_tm_bac *this)
+{
+ this->type = (bcmbal_tm_bac_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_pack(const bcmbal_tm_bac *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_tm_bac_type_pack(this->type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (this->type)
+ {
+ case BCMBAL_TM_BAC_TYPE_TAILDROP:
+ {
+ if (!bcmbal_buf_write_u32(buf, this->u.taildrop.max_size))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_RED:
+ {
+ if (!bcmbal_tm_red_pack(&this->u.red.red, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WRED:
+ {
+ if (!bcmbal_tm_red_pack(&this->u.wred.green, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_red_pack(&this->u.wred.yellow, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_red_pack(&this->u.wred.red, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_bac_get_packed_length(const bcmbal_tm_bac *this)
+{
+ uint32_t count = 1;
+ switch (this->type)
+ {
+ case BCMBAL_TM_BAC_TYPE_TAILDROP:
+ {
+ count += 4;
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_RED:
+ {
+ count += 3;
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WRED:
+ {
+ count += 9;
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+ default:
+ break;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_unpack(bcmbal_tm_bac *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_tm_bac_type_unpack(&this->type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (this->type)
+ {
+ case BCMBAL_TM_BAC_TYPE_TAILDROP:
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->u.taildrop.max_size))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_RED:
+ {
+ if (!bcmbal_tm_red_unpack(&this->u.red.red, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WRED:
+ {
+ if (!bcmbal_tm_red_unpack(&this->u.wred.green, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_red_unpack(&this->u.wred.yellow, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_red_unpack(&this->u.wred.red, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_tm_bac_type type;
+ if (!bcmbal_tm_bac_type_unpack(&type, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (type)
+ {
+ case BCMBAL_TM_BAC_TYPE_TAILDROP:
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_RED:
+ {
+ if (!bcmbal_buf_skip(packed, 3))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WRED:
+ {
+ if (!bcmbal_buf_skip(packed, 3))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 3))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 3))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_bac_bounds_check(const bcmbal_tm_bac *this)
+{
+ switch (this->type)
+ {
+ case BCMBAL_TM_BAC_TYPE_TAILDROP:
+ {
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_RED:
+ {
+ if (!bcmbal_tm_red_bounds_check(&this->u.red.red))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WRED:
+ {
+ if (!bcmbal_tm_red_bounds_check(&this->u.wred.green))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_red_bounds_check(&this->u.wred.yellow))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_tm_red_bounds_check(&this->u.wred.red))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_BAC_TYPE_WTAILDROP:
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_id_list_u8_set_default(bcmbal_tm_queue_id_list_u8 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_pack(const bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_write_u8(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_queue_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_id_list_u8_get_packed_length(const bcmbal_tm_queue_id_list_u8 *this)
+{
+ return 1 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_unpack(bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_read_u8(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_queue_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_tm_queue_id *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_tm_queue_id));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint8_t len;
+ if (!bcmbal_buf_read_u8(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_tm_queue_id) * len);
+ if (!bcmbal_buf_skip(packed, len * 1))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_id_list_u8_bounds_check(const bcmbal_tm_queue_id_list_u8 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_id_list_u8_set_default(bcmbal_tm_sched_id_list_u8 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_pack(const bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_write_u8(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_sched_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_id_list_u8_get_packed_length(const bcmbal_tm_sched_id_list_u8 *this)
+{
+ return 1 + (4 * this->len);
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_unpack(bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ uint8_t i0;
+ if (!bcmbal_buf_read_u8(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_tm_sched_id_list_u8\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (bcmbal_tm_sched_id *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(bcmbal_tm_sched_id));
+ }
+ }
+
+ for (i0 = 0; i0 < this->len; i0++)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->val[i0]))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint8_t len;
+ if (!bcmbal_buf_read_u8(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(bcmbal_tm_sched_id) * len);
+ if (!bcmbal_buf_skip(packed, len * 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_id_list_u8_bounds_check(const bcmbal_tm_sched_id_list_u8 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_owner_set_default(bcmbal_tm_sched_owner *this)
+{
+ this->type = (bcmbal_tm_sched_owner_type) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_pack(const bcmbal_tm_sched_owner *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_tm_sched_owner_type_pack(this->type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (this->type)
+ {
+ case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+ {
+ if (!bcmbal_intf_type_pack(this->u.interface.intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.interface.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.sub_term.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.sub_term.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+ {
+ if (!bcmbal_tm_sched_owner_agg_port_id_pack(this->u.agg_port.presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->u.agg_port.presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->u.agg_port.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->u.agg_port.presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.agg_port.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->u.agg_port.presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->u.agg_port.agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+ {
+ if (!bcmbal_buf_write_u8(buf, this->u.uni.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->u.uni.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write_u8(buf, this->u.uni.idx))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+ {
+ if (!bcmbal_buf_write_u32(buf, this->u.virtual.idx))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_owner_get_packed_length(const bcmbal_tm_sched_owner *this)
+{
+ uint32_t count = 1;
+ switch (this->type)
+ {
+ case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+ {
+ count += 8;
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+ {
+ count += 8;
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+ {
+ count += 15;
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+ {
+ count += 6;
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+ {
+ count += 4;
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+ default:
+ break;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_unpack(bcmbal_tm_sched_owner *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_tm_sched_owner_type_unpack(&this->type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (this->type)
+ {
+ case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+ {
+ if (!bcmbal_intf_type_unpack(&this->u.interface.intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.interface.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.sub_term.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.sub_term.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+ {
+ if (!bcmbal_tm_sched_owner_agg_port_id_unpack(&this->u.agg_port.presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->u.agg_port.presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->u.agg_port.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->u.agg_port.presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.agg_port.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->u.agg_port.presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->u.agg_port.agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->u.uni.intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->u.uni.sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_read_u8(buf, &this->u.uni.idx))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->u.virtual.idx))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_tm_sched_owner_type type;
+ if (!bcmbal_tm_sched_owner_type_unpack(&type, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ switch (type)
+ {
+ case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+ {
+ bcmbal_tm_sched_owner_agg_port_id presence_mask;
+ if (!bcmbal_tm_sched_owner_agg_port_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_owner_bounds_check(const bcmbal_tm_sched_owner *this)
+{
+ switch (this->type)
+ {
+ case BCMBAL_TM_SCHED_OWNER_TYPE_INTERFACE:
+ {
+ switch (this->u.interface.intf_type)
+ {
+ case BCMBAL_INTF_TYPE_NNI:
+ break;
+ case BCMBAL_INTF_TYPE_PON:
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_SUB_TERM:
+ {
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_AGG_PORT:
+ {
+ if ((this->u.agg_port.presence_mask & 0xFFFFFFFFFFFFFFF8ULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNI:
+ {
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_VIRTUAL:
+ {
+ }
+ break;
+ case BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED:
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_parent_set_default(bcmbal_tm_sched_parent *this)
+{
+ this->presence_mask = (bcmbal_tm_sched_parent_id) 0;
+ this->sched_id = (bcmbal_tm_sched_id) 0;
+ this->priority = (bcmbal_tm_priority) 0;
+ this->weight = (bcmbal_tm_weight) 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_pack(const bcmbal_tm_sched_parent *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_tm_sched_parent_id_pack(this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sched_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->weight))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_parent_get_packed_length(const bcmbal_tm_sched_parent *this)
+{
+ uint32_t count = 8;
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ count += 1;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_unpack(bcmbal_tm_sched_parent *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_tm_sched_parent_id_unpack(&this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sched_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->weight))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_tm_sched_parent_id presence_mask;
+ if (!bcmbal_tm_sched_parent_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_parent_bounds_check(const bcmbal_tm_sched_parent *this)
+{
+ if ((this->presence_mask & 0xFFFFFFFFFFFFFFF8ULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_shaping_set_default(bcmbal_tm_shaping *this)
+{
+ this->presence_mask = (bcmbal_tm_shaping_id) 0;
+ this->sbr = 0;
+ this->pbr = 0;
+ this->burst = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_pack(const bcmbal_tm_shaping *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_tm_shaping_id_pack(this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_write_u32(buf, this->sbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u32(buf, this->pbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_write_u32(buf, this->burst))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_shaping_get_packed_length(const bcmbal_tm_shaping *this)
+{
+ uint32_t count = 8;
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ count += 4;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_unpack(bcmbal_tm_shaping *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_tm_shaping_id_unpack(&this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->sbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->pbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->burst))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_tm_shaping_id presence_mask;
+ if (!bcmbal_tm_shaping_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_shaping_bounds_check(const bcmbal_tm_shaping *this)
+{
+ if ((this->presence_mask & 0xFFFFFFFFFFFFFFF8ULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_tcont_sla_set_default(bcmbal_tm_tcont_sla *this)
+{
+ this->presence_mask = (bcmbal_tm_tcont_sla_id) 0;
+ this->extra_bw_elig = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE;
+ this->nrt_cbr = 0;
+ this->rt_cbr = 0;
+ this->rt_profile = 0;
+ this->nrt_profile = 0;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_pack(const bcmbal_tm_tcont_sla *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_tm_tcont_sla_id_pack(this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_extra_bw_eligibility_type_pack(this->extra_bw_elig, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->nrt_cbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->rt_cbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->rt_profile))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_write_u8(buf, this->nrt_profile))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_tcont_sla_get_packed_length(const bcmbal_tm_tcont_sla *this)
+{
+ uint32_t count = 8;
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ count += 1;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ count += 1;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_unpack(bcmbal_tm_tcont_sla *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_tm_tcont_sla_id_unpack(&this->presence_mask, buf))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_extra_bw_eligibility_type_unpack(&this->extra_bw_elig, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->nrt_cbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->rt_cbr))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->rt_profile))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->nrt_profile))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ bcmbal_tm_tcont_sla_id presence_mask;
+ if (!bcmbal_tm_tcont_sla_id_unpack(&presence_mask, packed))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) presence_mask & 0x0001) == 0x0001))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0002) == 0x0002))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0004) == 0x0004))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0008) == 0x0008))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((((uint64_t) presence_mask & 0x0010) == 0x0010))
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_tcont_sla_bounds_check(const bcmbal_tm_tcont_sla *this)
+{
+ if ((this->presence_mask & 0xFFFFFFFFFFFFFFE0ULL) != 0)
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((((uint64_t) this->presence_mask & 0x0001) == 0x0001))
+ {
+ switch (this->extra_bw_elig)
+ {
+ case BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE:
+ break;
+ case BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NOT_ASSURED:
+ break;
+ case BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_BEST_EFFORT:
+ break;
+ default:
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_u8_list_u32_set_default(bcmbal_u8_list_u32 *this)
+{
+ this->len = 0;
+ this->val = NULL;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_pack(const bcmbal_u8_list_u32 *this, bcmbal_buf *buf)
+{
+ if (!bcmbal_buf_write_u32(buf, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_u8_list_u32\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+
+ if (!bcmbal_buf_write(buf, this->val, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_u8_list_u32_get_packed_length(const bcmbal_u8_list_u32 *this)
+{
+ return 4 + this->len;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_unpack(bcmbal_u8_list_u32 *this, bcmbal_buf *buf, void **extra_mem)
+{
+ if (!bcmbal_buf_read_u32(buf, &this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ if ((this->len > 0) && (this->val == NULL))
+ {
+ if (extra_mem == NULL)
+ {
+ bcmos_trace(BCMOS_TRACE_LEVEL_ERROR, "Error: list field \"val\" of struct \"bcmbal_u8_list_u32\" is uninitialized (NULL). You must allocate memory for this pointer before sending/receiving the message.\n");
+ return BCMOS_FALSE;
+ }
+ else
+ {
+ this->val = (uint8_t *) *extra_mem;
+ *extra_mem = ((uint8_t *) *extra_mem) + BCMOS_ROUND_TO_WORD(this->len * sizeof(uint8_t));
+ }
+ }
+
+ if (!bcmbal_buf_read(buf, this->val, this->len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem)
+{
+ uint32_t len;
+ if (!bcmbal_buf_read_u32(packed, &len))
+ {
+ return BCMOS_FALSE;
+ }
+
+ *extra_mem += BCMOS_ROUND_TO_WORD(sizeof(uint8_t) * len);
+ if (!bcmbal_buf_skip(packed, len * 1))
+ {
+ return BCMOS_FALSE;
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_u8_list_u32_bounds_check(const bcmbal_u8_list_u32 *this)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_access_terminal_key_set_default(bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+ {
+ this->access_term_id = (bcmbal_access_id) 1;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_pack(const bcmbal_access_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->access_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_access_terminal_key_get_packed_length(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_unpack(bcmbal_access_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->access_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_key_bounds_check(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_key_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID)) != 0)
+ {
+ if (this->access_term_id < (bcmbal_access_id) 1)
+ {
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID;
+ return BCMOS_FALSE;
+ }
+
+ if (this->access_term_id > (bcmbal_access_id) 1)
+ {
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_KEY_ID_ACCESS_TERM_ID;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_access_terminal_cfg_data_set_default(bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+ {
+ this->iwf_mode = BCMBAL_IWF_MODE_DIRECT_MAPPING;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_pack(const bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+ {
+ if (!bcmbal_iwf_mode_pack(this->iwf_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_access_terminal_cfg_data_get_packed_length(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_unpack(bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+ {
+ if (!bcmbal_iwf_mode_unpack(&this->iwf_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_cfg_data_bounds_check(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_CFG_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE)) != 0)
+ {
+ switch (this->iwf_mode)
+ {
+ case BCMBAL_IWF_MODE_DIRECT_MAPPING:
+ break;
+ case BCMBAL_IWF_MODE_PER_FLOW:
+ break;
+ default:
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_access_terminal_ind_data_set_default(bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+ {
+ this->iwf_mode = BCMBAL_IWF_MODE_DIRECT_MAPPING;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_pack(const bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+ {
+ if (!bcmbal_iwf_mode_pack(this->iwf_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_access_terminal_ind_data_get_packed_length(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_unpack(bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+ {
+ if (!bcmbal_iwf_mode_unpack(&this->iwf_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_access_terminal_ind_data_bounds_check(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_ind_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_IND_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_IND_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE)) != 0)
+ {
+ switch (this->iwf_mode)
+ {
+ case BCMBAL_IWF_MODE_DIRECT_MAPPING:
+ break;
+ case BCMBAL_IWF_MODE_PER_FLOW:
+ break;
+ default:
+ *failed_prop = BCMBAL_ACCESS_TERMINAL_IND_ID_IWF_MODE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_key_set_default(bcmbal_flow_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+ {
+ this->flow_id = (bcmbal_flow_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+ {
+ this->flow_type = (bcmbal_flow_type) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_pack(const bcmbal_flow_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->flow_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_flow_type_pack(this->flow_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_key_get_packed_length(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_unpack(bcmbal_flow_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->flow_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_flow_type_unpack(&this->flow_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_key_bounds_check(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present, bcmbal_flow_key_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_KEY_ID_FLOW_TYPE)) != 0)
+ {
+ switch (this->flow_type)
+ {
+ case BCMBAL_FLOW_TYPE_UPSTREAM:
+ break;
+ case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+ break;
+ case BCMBAL_FLOW_TYPE_BROADCAST:
+ break;
+ case BCMBAL_FLOW_TYPE_MULTICAST:
+ break;
+ default:
+ *failed_prop = BCMBAL_FLOW_KEY_ID_FLOW_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_cfg_data_set_default(bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+ {
+ this->access_int_id = (bcmbal_intf_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+ {
+ this->network_int_id = (bcmbal_intf_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+ {
+ this->sub_term_id = (bcmbal_sub_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+ {
+ this->sub_term_uni_idx = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ this->svc_port_id = (bcmbal_service_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+ {
+ this->agg_port_id = (bcmbal_aggregation_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+ {
+ this->resolve_mac = BCMOS_FALSE;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+ {
+ this->classifier.presence_mask = (bcmbal_classifier_id) 0;
+ this->classifier.o_tpid = 0;
+ this->classifier.o_vid = 0;
+ this->classifier.i_tpid = 0;
+ this->classifier.i_vid = 0;
+ this->classifier.o_pbits = 0;
+ this->classifier.i_pbits = 0;
+ this->classifier.ether_type = 0;
+ bcmos_mac_address_init(&this->classifier.dst_mac);
+ bcmos_mac_address_init(&this->classifier.src_mac);
+ this->classifier.ip_proto = 0;
+ bcmos_ipv4_address_init(&this->classifier.dst_ip);
+ bcmos_ipv4_address_init(&this->classifier.src_ip);
+ this->classifier.src_port = 0;
+ this->classifier.dst_port = 0;
+ this->classifier.pkt_tag_type = (bcmbal_pkt_tag_type) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+ {
+ this->action.presence_mask = (bcmbal_action_id) 0;
+ this->action.cmds_bitmask = (bcmbal_action_cmd_id) 0;
+ this->action.o_vid = 0;
+ this->action.o_pbits = 0;
+ this->action.o_tpid = 0;
+ this->action.i_vid = 0;
+ this->action.i_pbits = 0;
+ this->action.i_tpid = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+ {
+ this->sla.presence_mask = (bcmbal_sla_id) 0;
+ this->sla.min_rate = 0;
+ this->sla.max_rate = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+ {
+ this->cookie = (bcmbal_cookie) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+ {
+ this->priority = 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+ {
+ this->group_id = (bcmbal_group_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+ {
+ this->queue.sched_id = (bcmbal_tm_sched_id) 0;
+ this->queue.queue_id = (bcmbal_tm_queue_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_pack(const bcmbal_flow_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->access_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->network_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+ {
+ if (!bcmbal_buf_write_u8(buf, this->sub_term_uni_idx))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+ {
+ if (!bcmbal_buf_write_bool(buf, this->resolve_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_pack(&this->classifier, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_pack(&this->action, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_pack(&this->sla, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, (uint64_t) this->cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->group_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+ {
+ if (!bcmbal_tm_queue_ref_pack(&this->queue, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_cfg_data_get_packed_length(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+ {
+ count += bcmbal_classifier_get_packed_length(&this->classifier);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+ {
+ count += bcmbal_action_get_packed_length(&this->action);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+ {
+ count += bcmbal_sla_get_packed_length(&this->sla);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+ {
+ count += 5;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_unpack(bcmbal_flow_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->access_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->network_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->sub_term_uni_idx))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+ {
+ if (!bcmbal_buf_read_bool(buf, &this->resolve_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_unpack(&this->classifier, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_unpack(&this->action, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_unpack(&this->sla, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->group_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+ {
+ if (!bcmbal_tm_queue_ref_unpack(&this->queue, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACCESS_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_NETWORK_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SUB_TERM_UNI_IDX)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_RESOLVE_MAC)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_GROUP_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 5))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_cfg_data_bounds_check(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_FLOW_CFG_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_FLOW_CFG_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_bounds_check(&this->classifier))
+ {
+ *failed_prop = BCMBAL_FLOW_CFG_ID_CLASSIFIER;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_bounds_check(&this->action))
+ {
+ *failed_prop = BCMBAL_FLOW_CFG_ID_ACTION;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_bounds_check(&this->sla))
+ {
+ *failed_prop = BCMBAL_FLOW_CFG_ID_SLA;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_PRIORITY)) != 0)
+ {
+ if (this->priority < 1)
+ {
+ *failed_prop = BCMBAL_FLOW_CFG_ID_PRIORITY;
+ return BCMOS_FALSE;
+ }
+
+ if (this->priority > 255)
+ {
+ *failed_prop = BCMBAL_FLOW_CFG_ID_PRIORITY;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_CFG_ID_QUEUE)) != 0)
+ {
+ if (!bcmbal_tm_queue_ref_bounds_check(&this->queue))
+ {
+ *failed_prop = BCMBAL_FLOW_CFG_ID_QUEUE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_stat_data_set_default(bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+ {
+ this->rx_packets = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+ {
+ this->rx_bytes = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+ {
+ this->tx_packets = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+ {
+ this->tx_bytes = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_pack(const bcmbal_flow_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->rx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->rx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->tx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->tx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_stat_data_get_packed_length(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+ {
+ count += 8;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_unpack(bcmbal_flow_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->rx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->rx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->tx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->tx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_stat_data_bounds_check(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_stat_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_flow_ind_data_set_default(bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+ {
+ this->access_int_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+ {
+ this->network_int_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+ {
+ this->sub_term_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ this->svc_port_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+ {
+ this->agg_port_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+ {
+ this->resolve_mac = BCMOS_FALSE;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+ {
+ this->base_tc_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+ {
+ this->classifier.presence_mask = (bcmbal_classifier_id) 0;
+ this->classifier.o_tpid = 0;
+ this->classifier.o_vid = 0;
+ this->classifier.i_tpid = 0;
+ this->classifier.i_vid = 0;
+ this->classifier.o_pbits = 0;
+ this->classifier.i_pbits = 0;
+ this->classifier.ether_type = 0;
+ bcmos_mac_address_init(&this->classifier.dst_mac);
+ bcmos_mac_address_init(&this->classifier.src_mac);
+ this->classifier.ip_proto = 0;
+ bcmos_ipv4_address_init(&this->classifier.dst_ip);
+ bcmos_ipv4_address_init(&this->classifier.src_ip);
+ this->classifier.src_port = 0;
+ this->classifier.dst_port = 0;
+ this->classifier.pkt_tag_type = (bcmbal_pkt_tag_type) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+ {
+ this->action.presence_mask = (bcmbal_action_id) 0;
+ this->action.cmds_bitmask = (bcmbal_action_cmd_id) 0;
+ this->action.o_vid = 0;
+ this->action.o_pbits = 0;
+ this->action.o_tpid = 0;
+ this->action.i_vid = 0;
+ this->action.i_pbits = 0;
+ this->action.i_tpid = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+ {
+ this->sla.presence_mask = (bcmbal_sla_id) 0;
+ this->sla.min_rate = 0;
+ this->sla.max_rate = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+ {
+ this->cookie = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+ {
+ this->priority = 1;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_pack(const bcmbal_flow_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->access_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->network_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, this->sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+ {
+ if (!bcmbal_buf_write_bool(buf, this->resolve_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->base_tc_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_pack(&this->classifier, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_pack(&this->action, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_pack(&this->sla, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, this->cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_flow_ind_data_get_packed_length(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+ {
+ count += bcmbal_classifier_get_packed_length(&this->classifier);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+ {
+ count += bcmbal_action_get_packed_length(&this->action);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+ {
+ count += bcmbal_sla_get_packed_length(&this->sla);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+ {
+ count += 2;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_unpack(bcmbal_flow_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->access_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->network_int_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+ {
+ if (!bcmbal_buf_read_bool(buf, &this->resolve_mac))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->base_tc_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_unpack(&this->classifier, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_unpack(&this->action, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_unpack(&this->sla, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACCESS_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_NETWORK_INT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_RESOLVE_MAC)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_BASE_TC_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_flow_ind_data_bounds_check(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_ind_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_FLOW_IND_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_FLOW_IND_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_CLASSIFIER)) != 0)
+ {
+ if (!bcmbal_classifier_bounds_check(&this->classifier))
+ {
+ *failed_prop = BCMBAL_FLOW_IND_ID_CLASSIFIER;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_ACTION)) != 0)
+ {
+ if (!bcmbal_action_bounds_check(&this->action))
+ {
+ *failed_prop = BCMBAL_FLOW_IND_ID_ACTION;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_SLA)) != 0)
+ {
+ if (!bcmbal_sla_bounds_check(&this->sla))
+ {
+ *failed_prop = BCMBAL_FLOW_IND_ID_SLA;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_FLOW_IND_ID_PRIORITY)) != 0)
+ {
+ if (this->priority < 1)
+ {
+ *failed_prop = BCMBAL_FLOW_IND_ID_PRIORITY;
+ return BCMOS_FALSE;
+ }
+
+ if (this->priority > 255)
+ {
+ *failed_prop = BCMBAL_FLOW_IND_ID_PRIORITY;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_key_set_default(bcmbal_group_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+ {
+ this->group_id = (bcmbal_group_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_pack(const bcmbal_group_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->group_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_key_get_packed_length(const bcmbal_group_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_unpack(bcmbal_group_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->group_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_KEY_ID_GROUP_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_key_bounds_check(const bcmbal_group_key *this, bcmbal_presence_mask fields_present, bcmbal_group_key_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_group_cfg_data_set_default(bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+ {
+ this->members_cmd = (bcmbal_group_member_cmd) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+ {
+ this->members.len = 0;
+ this->members.val = NULL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+ {
+ this->cookie = (bcmbal_cookie) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+ {
+ this->flows.len = 0;
+ this->flows.val = NULL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+ {
+ this->owner = BCMBAL_GROUP_OWNER_NONE;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_pack(const bcmbal_group_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+ {
+ if (!bcmbal_group_member_cmd_pack(this->members_cmd, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+ {
+ if (!bcmbal_group_member_info_list_u16_pack(&this->members, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, (uint64_t) this->cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+ {
+ if (!bcmbal_flow_id_list_u32_pack(&this->flows, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_group_owner_pack(this->owner, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_group_cfg_data_get_packed_length(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+ {
+ count += bcmbal_group_member_info_list_u16_get_packed_length(&this->members);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+ {
+ count += bcmbal_flow_id_list_u32_get_packed_length(&this->flows);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+ {
+ count += 1;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_unpack(bcmbal_group_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+ {
+ if (!bcmbal_group_member_cmd_unpack(&this->members_cmd, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+ {
+ if (!bcmbal_group_member_info_list_u16_unpack(&this->members, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+ {
+ if (!bcmbal_flow_id_list_u32_unpack(&this->flows, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_group_owner_unpack(&this->owner, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+ {
+ if (!bcmbal_group_member_info_list_u16_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+ {
+ if (!bcmbal_flow_id_list_u32_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_group_cfg_data_bounds_check(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_group_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS_CMD)) != 0)
+ {
+ switch (this->members_cmd)
+ {
+ case BCMBAL_GROUP_MEMBER_CMD_ADD_MEMBERS:
+ break;
+ case BCMBAL_GROUP_MEMBER_CMD_REM_MEMBERS:
+ break;
+ case BCMBAL_GROUP_MEMBER_CMD_SET_MEMBERS:
+ break;
+ default:
+ *failed_prop = BCMBAL_GROUP_CFG_ID_MEMBERS_CMD;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_MEMBERS)) != 0)
+ {
+ if (!bcmbal_group_member_info_list_u16_bounds_check(&this->members))
+ {
+ *failed_prop = BCMBAL_GROUP_CFG_ID_MEMBERS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS)) != 0)
+ {
+ if (!bcmbal_flow_id_list_u32_bounds_check(&this->flows))
+ {
+ *failed_prop = BCMBAL_GROUP_CFG_ID_FLOWS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_GROUP_CFG_ID_OWNER)) != 0)
+ {
+ switch (this->owner)
+ {
+ case BCMBAL_GROUP_OWNER_NONE:
+ break;
+ case BCMBAL_GROUP_OWNER_MULTICAST:
+ break;
+ case BCMBAL_GROUP_OWNER_UNICAST:
+ break;
+ default:
+ *failed_prop = BCMBAL_GROUP_CFG_ID_OWNER;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_key_set_default(bcmbal_interface_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+ {
+ this->intf_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+ {
+ this->intf_type = BCMBAL_INTF_TYPE_NNI;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_pack(const bcmbal_interface_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_intf_type_pack(this->intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_key_get_packed_length(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_unpack(bcmbal_interface_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_intf_type_unpack(&this->intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_key_bounds_check(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present, bcmbal_interface_key_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_KEY_ID_INTF_TYPE)) != 0)
+ {
+ switch (this->intf_type)
+ {
+ case BCMBAL_INTF_TYPE_NNI:
+ break;
+ case BCMBAL_INTF_TYPE_PON:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_KEY_ID_INTF_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_cfg_data_set_default(bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ this->min_data_agg_port_id = (bcmbal_aggregation_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ this->min_data_svc_port_id = (bcmbal_service_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ this->transceiver_type = BCMBAL_TRX_TYPE_GPON_SPS_43_48;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+ {
+ this->ds_miss_mode = BCMBAL_DS_MISS_MODE_DISCARD;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+ {
+ this->mtu = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+ {
+ this->flow_control = BCMBAL_CONTROL_DISABLE;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+ {
+ this->ds_tm = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+ {
+ this->us_tm = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+ {
+ this->sub_term_id_list.len = 0;
+ this->sub_term_id_list.val = NULL;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_pack(const bcmbal_interface_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->min_data_agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->min_data_svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ if (!bcmbal_trx_type_pack(this->transceiver_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+ {
+ if (!bcmbal_ds_miss_mode_pack(this->ds_miss_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->mtu))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+ {
+ if (!bcmbal_control_pack(this->flow_control, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+ {
+ if (!bcmbal_sub_id_list_u16_pack(&this->sub_term_id_list, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_cfg_data_get_packed_length(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+ {
+ count += bcmbal_sub_id_list_u16_get_packed_length(&this->sub_term_id_list);
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_unpack(bcmbal_interface_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->min_data_agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->min_data_svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ if (!bcmbal_trx_type_unpack(&this->transceiver_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+ {
+ if (!bcmbal_ds_miss_mode_unpack(&this->ds_miss_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->mtu))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+ {
+ if (!bcmbal_control_unpack(&this->flow_control, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+ {
+ if (!bcmbal_sub_id_list_u16_unpack(&this->sub_term_id_list, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_MTU)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+ {
+ if (!bcmbal_sub_id_list_u16_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_cfg_data_bounds_check(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_CFG_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_CFG_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ switch (this->transceiver_type)
+ {
+ case BCMBAL_TRX_TYPE_GPON_SPS_43_48:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_LTE_3680_M:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_LTE_3680_P:
+ break;
+ case BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC:
+ break;
+ case BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC:
+ break;
+ case BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_CFG_ID_TRANSCEIVER_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE)) != 0)
+ {
+ switch (this->ds_miss_mode)
+ {
+ case BCMBAL_DS_MISS_MODE_DISCARD:
+ break;
+ case BCMBAL_DS_MISS_MODE_BROADCAST:
+ break;
+ case BCMBAL_DS_MISS_MODE_VID:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_CFG_ID_DS_MISS_MODE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL)) != 0)
+ {
+ switch (this->flow_control)
+ {
+ case BCMBAL_CONTROL_DISABLE:
+ break;
+ case BCMBAL_CONTROL_ENABLE:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_CFG_ID_FLOW_CONTROL;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST)) != 0)
+ {
+ if (!bcmbal_sub_id_list_u16_bounds_check(&this->sub_term_id_list))
+ {
+ *failed_prop = BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_stat_data_set_default(bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+ {
+ this->rx_packets = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+ {
+ this->rx_bytes = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+ {
+ this->tx_packets = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+ {
+ this->tx_bytes = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_pack(const bcmbal_interface_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->rx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->rx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->tx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->tx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_stat_data_get_packed_length(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+ {
+ count += 8;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_unpack(bcmbal_interface_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->rx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->rx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->tx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->tx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_stat_data_bounds_check(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_stat_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_interface_ind_data_set_default(bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ this->min_data_agg_port_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ this->min_data_svc_port_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ this->transceiver_type = BCMBAL_TRX_TYPE_GPON_SPS_43_48;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+ {
+ this->ds_miss_mode = BCMBAL_DS_MISS_MODE_DISCARD;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+ {
+ this->mtu = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+ {
+ this->flow_control = BCMBAL_CONTROL_DISABLE;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+ {
+ this->ds_tm = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+ {
+ this->us_tm = (bcmbal_tm_sched_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_pack(const bcmbal_interface_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->min_data_agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->min_data_svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ if (!bcmbal_trx_type_pack(this->transceiver_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+ {
+ if (!bcmbal_ds_miss_mode_pack(this->ds_miss_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->mtu))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+ {
+ if (!bcmbal_control_pack(this->flow_control, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_interface_ind_data_get_packed_length(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_unpack(bcmbal_interface_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->min_data_agg_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->min_data_svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ if (!bcmbal_trx_type_unpack(&this->transceiver_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+ {
+ if (!bcmbal_ds_miss_mode_unpack(&this->ds_miss_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->mtu))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+ {
+ if (!bcmbal_control_unpack(&this->flow_control, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_AGG_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MIN_DATA_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_MTU)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_interface_ind_data_bounds_check(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_ind_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_IND_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_IND_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE)) != 0)
+ {
+ switch (this->transceiver_type)
+ {
+ case BCMBAL_TRX_TYPE_GPON_SPS_43_48:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_SPS_SOG_4321:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_LTE_3680_M:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_SOURCE_PHOTONICS:
+ break;
+ case BCMBAL_TRX_TYPE_GPON_LTE_3680_P:
+ break;
+ case BCMBAL_TRX_TYPE_XGPON_LTH_7222_PC:
+ break;
+ case BCMBAL_TRX_TYPE_XGPON_LTH_7226_PC:
+ break;
+ case BCMBAL_TRX_TYPE_XGPON_LTH_5302_PC:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_IND_ID_TRANSCEIVER_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE)) != 0)
+ {
+ switch (this->ds_miss_mode)
+ {
+ case BCMBAL_DS_MISS_MODE_DISCARD:
+ break;
+ case BCMBAL_DS_MISS_MODE_BROADCAST:
+ break;
+ case BCMBAL_DS_MISS_MODE_VID:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_IND_ID_DS_MISS_MODE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL)) != 0)
+ {
+ switch (this->flow_control)
+ {
+ case BCMBAL_CONTROL_DISABLE:
+ break;
+ case BCMBAL_CONTROL_ENABLE:
+ break;
+ default:
+ *failed_prop = BCMBAL_INTERFACE_IND_ID_FLOW_CONTROL;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_packet_key_set_default(bcmbal_packet_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+ {
+ this->reserved = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+ {
+ this->packet_send_dest.type = (bcmbal_dest_type) 0;
+ this->packet_send_dest.u.nni.int_id = (bcmbal_intf_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_pack(const bcmbal_packet_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, this->reserved))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+ {
+ if (!bcmbal_dest_pack(&this->packet_send_dest, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_packet_key_get_packed_length(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+ {
+ count += bcmbal_dest_get_packed_length(&this->packet_send_dest);
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_unpack(bcmbal_packet_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->reserved))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+ {
+ if (!bcmbal_dest_unpack(&this->packet_send_dest, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_RESERVED)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+ {
+ if (!bcmbal_dest_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_key_bounds_check(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present, bcmbal_packet_key_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST)) != 0)
+ {
+ if (!bcmbal_dest_bounds_check(&this->packet_send_dest))
+ {
+ *failed_prop = BCMBAL_PACKET_KEY_ID_PACKET_SEND_DEST;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_packet_cfg_data_set_default(bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+ {
+ this->flow_id = (bcmbal_flow_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+ {
+ this->flow_type = (bcmbal_flow_type) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+ {
+ this->intf_id = (bcmbal_intf_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+ {
+ this->intf_type = BCMBAL_INTF_TYPE_NNI;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+ {
+ this->svc_port = (bcmbal_service_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+ {
+ this->flow_cookie = (bcmbal_cookie) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+ {
+ this->pkt.len = 0;
+ this->pkt.val = NULL;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_pack(const bcmbal_packet_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->flow_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_flow_type_pack(this->flow_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_intf_type_pack(this->intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, (uint64_t) this->flow_cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_pack(&this->pkt, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_packet_cfg_data_get_packed_length(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+ {
+ count += bcmbal_u8_list_u32_get_packed_length(&this->pkt);
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_unpack(bcmbal_packet_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->flow_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_flow_type_unpack(&this->flow_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_intf_type_unpack(&this->intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->flow_cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_unpack(&this->pkt, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_SVC_PORT)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_cfg_data_bounds_check(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_FLOW_TYPE)) != 0)
+ {
+ switch (this->flow_type)
+ {
+ case BCMBAL_FLOW_TYPE_UPSTREAM:
+ break;
+ case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+ break;
+ case BCMBAL_FLOW_TYPE_BROADCAST:
+ break;
+ case BCMBAL_FLOW_TYPE_MULTICAST:
+ break;
+ default:
+ *failed_prop = BCMBAL_PACKET_CFG_ID_FLOW_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_INTF_TYPE)) != 0)
+ {
+ switch (this->intf_type)
+ {
+ case BCMBAL_INTF_TYPE_NNI:
+ break;
+ case BCMBAL_INTF_TYPE_PON:
+ break;
+ default:
+ *failed_prop = BCMBAL_PACKET_CFG_ID_INTF_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_CFG_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_bounds_check(&this->pkt))
+ {
+ *failed_prop = BCMBAL_PACKET_CFG_ID_PKT;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_packet_ind_data_set_default(bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+ {
+ this->flow_id = (bcmbal_flow_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+ {
+ this->flow_type = (bcmbal_flow_type) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+ {
+ this->intf_id = (bcmbal_intf_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+ {
+ this->intf_type = BCMBAL_INTF_TYPE_NNI;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+ {
+ this->svc_port = (bcmbal_service_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+ {
+ this->flow_cookie = (bcmbal_cookie) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+ {
+ this->pkt.len = 0;
+ this->pkt.val = NULL;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_pack(const bcmbal_packet_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->flow_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_flow_type_pack(this->flow_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_intf_type_pack(this->intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, (uint64_t) this->flow_cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_pack(&this->pkt, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_packet_ind_data_get_packed_length(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+ {
+ count += bcmbal_u8_list_u32_get_packed_length(&this->pkt);
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_unpack(bcmbal_packet_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->flow_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_flow_type_unpack(&this->flow_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_intf_type_unpack(&this->intf_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, (uint64_t *) &this->flow_cookie))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_unpack(&this->pkt, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_SVC_PORT)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_COOKIE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_packet_ind_data_bounds_check(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_ind_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_FLOW_TYPE)) != 0)
+ {
+ switch (this->flow_type)
+ {
+ case BCMBAL_FLOW_TYPE_UPSTREAM:
+ break;
+ case BCMBAL_FLOW_TYPE_DOWNSTREAM:
+ break;
+ case BCMBAL_FLOW_TYPE_BROADCAST:
+ break;
+ case BCMBAL_FLOW_TYPE_MULTICAST:
+ break;
+ default:
+ *failed_prop = BCMBAL_PACKET_IND_ID_FLOW_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_INTF_TYPE)) != 0)
+ {
+ switch (this->intf_type)
+ {
+ case BCMBAL_INTF_TYPE_NNI:
+ break;
+ case BCMBAL_INTF_TYPE_PON:
+ break;
+ default:
+ *failed_prop = BCMBAL_PACKET_IND_ID_INTF_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_PACKET_IND_ID_PKT)) != 0)
+ {
+ if (!bcmbal_u8_list_u32_bounds_check(&this->pkt))
+ {
+ *failed_prop = BCMBAL_PACKET_IND_ID_PKT;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_key_set_default(bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+ {
+ this->sub_term_id = (bcmbal_sub_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+ {
+ this->intf_id = (bcmbal_intf_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_pack(const bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_key_get_packed_length(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_unpack(bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sub_term_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->intf_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_SUB_TERM_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_KEY_ID_INTF_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_key_bounds_check(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_key_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_cfg_data_set_default(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+ {
+ memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+ memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+ {
+ memset(this->password.arr, 0, sizeof(this->password.arr));
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+ {
+ memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ this->svc_port_id = (bcmbal_service_port_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+ {
+ bcmos_mac_address_init(&this->mac_address);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+ {
+ this->ds_tm = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+ {
+ this->us_tm = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+ {
+ this->svc_port_id_list.len = 0;
+ this->svc_port_id_list.val = NULL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+ {
+ this->agg_port_id_list.len = 0;
+ this->agg_port_id_list.val = NULL;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_pack(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_serial_number_pack(&this->serial_number, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_password_pack(&this->password, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_registration_id_pack(&this->registration_id, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, (uint16_t) this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+ {
+ if (!bcmbal_buf_write_mac_address(buf, this->mac_address))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_service_port_id_list_u8_pack(&this->svc_port_id_list, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_aggregation_port_id_list_u8_pack(&this->agg_port_id_list, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_cfg_data_get_packed_length(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+ {
+ count += 10;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+ {
+ count += 36;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+ {
+ count += 6;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+ {
+ count += bcmbal_service_port_id_list_u8_get_packed_length(&this->svc_port_id_list);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+ {
+ count += bcmbal_aggregation_port_id_list_u8_get_packed_length(&this->agg_port_id_list);
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_unpack(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_serial_number_unpack(&this->serial_number, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_password_unpack(&this->password, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_registration_id_unpack(&this->registration_id, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, (uint16_t *) &this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+ {
+ if (!bcmbal_buf_read_mac_address(buf, &this->mac_address))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_service_port_id_list_u8_unpack(&this->svc_port_id_list, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_aggregation_port_id_list_u8_unpack(&this->agg_port_id_list, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 10))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 36))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_MAC_ADDRESS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 6))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_service_port_id_list_u8_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_aggregation_port_id_list_u8_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_bounds_check(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_serial_number_bounds_check(&this->serial_number))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SERIAL_NUMBER;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_password_bounds_check(&this->password))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_PASSWORD;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_registration_id_bounds_check(&this->registration_id))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_REGISTRATION_ID;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_service_port_id_list_u8_bounds_check(&this->svc_port_id_list))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST)) != 0)
+ {
+ if (!bcmbal_aggregation_port_id_list_u8_bounds_check(&this->agg_port_id_list))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_stat_data_set_default(bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+ {
+ this->rx_packets = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+ {
+ this->rx_bytes = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+ {
+ this->tx_packets = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+ {
+ this->tx_bytes = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_pack(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->rx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->rx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->tx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->tx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_stat_data_get_packed_length(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+ {
+ count += 8;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_unpack(bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->rx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->rx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->tx_packets))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->tx_bytes))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_RX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_PACKETS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_STAT_ID_TX_BYTES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_stat_data_bounds_check(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_stat_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_subscriber_terminal_ind_data_set_default(bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ this->admin_state = (bcmbal_state) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ this->oper_status = (bcmbal_status) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+ {
+ memset(this->serial_number.vendor_id, 0, sizeof(this->serial_number.vendor_id));
+ memset(this->serial_number.vendor_specific, 0, sizeof(this->serial_number.vendor_specific));
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+ {
+ memset(this->password.arr, 0, sizeof(this->password.arr));
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+ {
+ memset(this->registration_id.arr, 0, sizeof(this->registration_id.arr));
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ this->svc_port_id = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+ {
+ bcmos_mac_address_init(&this->mac_address);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+ {
+ this->ds_tm = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+ {
+ this->us_tm = (bcmbal_tm_sched_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_pack(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_pack(this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_pack(this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_serial_number_pack(&this->serial_number, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_password_pack(&this->password, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_registration_id_pack(&this->registration_id, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u16(buf, this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+ {
+ if (!bcmbal_buf_write_mac_address(buf, this->mac_address))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_subscriber_terminal_ind_data_get_packed_length(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+ {
+ count += 10;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+ {
+ count += 36;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ count += 2;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+ {
+ count += 6;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_unpack(bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_state_unpack(&this->admin_state, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_status_unpack(&this->oper_status, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_serial_number_unpack(&this->serial_number, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_password_unpack(&this->password, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_registration_id_unpack(&this->registration_id, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u16(buf, &this->svc_port_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+ {
+ if (!bcmbal_buf_read_mac_address(buf, &this->mac_address))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->ds_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->us_tm))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 10))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 36))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SVC_PORT_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 2))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_MAC_ADDRESS)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 6))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_DS_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_US_TM)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_subscriber_terminal_ind_data_bounds_check(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_ind_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE)) != 0)
+ {
+ switch (this->admin_state)
+ {
+ case BCMBAL_STATE_UP:
+ break;
+ case BCMBAL_STATE_DOWN:
+ break;
+ case BCMBAL_STATE_TESTING:
+ break;
+ default:
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_ADMIN_STATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS)) != 0)
+ {
+ switch (this->oper_status)
+ {
+ case BCMBAL_STATUS_UP:
+ break;
+ case BCMBAL_STATUS_DOWN:
+ break;
+ case BCMBAL_STATUS_TESTING:
+ break;
+ case BCMBAL_STATUS_NOT_PRESENT:
+ break;
+ case BCMBAL_STATUS_LOWER_LAYER_DOWN:
+ break;
+ case BCMBAL_STATUS_UNKNOWN:
+ break;
+ default:
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_OPER_STATUS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER)) != 0)
+ {
+ if (!bcmbal_serial_number_bounds_check(&this->serial_number))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_SERIAL_NUMBER;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD)) != 0)
+ {
+ if (!bcmbal_password_bounds_check(&this->password))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_PASSWORD;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID)) != 0)
+ {
+ if (!bcmbal_registration_id_bounds_check(&this->registration_id))
+ {
+ *failed_prop = BCMBAL_SUBSCRIBER_TERMINAL_IND_ID_REGISTRATION_ID;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_key_set_default(bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+ {
+ this->sched_id = (bcmbal_tm_sched_id) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+ {
+ this->sched_dir = (bcmbal_tm_sched_dir) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+ {
+ this->id = (bcmbal_tm_queue_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_pack(const bcmbal_tm_queue_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->sched_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+ {
+ if (!bcmbal_tm_sched_dir_pack(this->sched_dir, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_key_get_packed_length(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+ {
+ count += 1;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_unpack(bcmbal_tm_queue_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->sched_id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+ {
+ if (!bcmbal_tm_sched_dir_unpack(&this->sched_dir, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_key_bounds_check(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_key_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR)) != 0)
+ {
+ switch (this->sched_dir)
+ {
+ case BCMBAL_TM_SCHED_DIR_US:
+ break;
+ case BCMBAL_TM_SCHED_DIR_DS:
+ break;
+ default:
+ *failed_prop = BCMBAL_TM_QUEUE_KEY_ID_SCHED_DIR;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_cfg_data_set_default(bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+ {
+ this->priority = (bcmbal_tm_priority) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+ {
+ this->weight = (bcmbal_tm_weight) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+ {
+ this->rate.presence_mask = (bcmbal_tm_shaping_id) 0;
+ this->rate.sbr = 0;
+ this->rate.pbr = 0;
+ this->rate.burst = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+ {
+ this->bac.type = BCMBAL_TM_BAC_TYPE_TAILDROP;
+ this->bac.u.taildrop.max_size = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+ {
+ this->creation_mode = BCMBAL_TM_CREATION_MODE_MANUAL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+ {
+ this->ref_count = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_pack(const bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+ {
+ if (!bcmbal_buf_write_u8(buf, (uint8_t) this->weight))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_pack(&this->rate, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+ {
+ if (!bcmbal_tm_bac_pack(&this->bac, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+ {
+ if (!bcmbal_tm_creation_mode_pack(this->creation_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+ {
+ if (!bcmbal_buf_write_u8(buf, this->ref_count))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_cfg_data_get_packed_length(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+ {
+ count += bcmbal_tm_shaping_get_packed_length(&this->rate);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+ {
+ count += bcmbal_tm_bac_get_packed_length(&this->bac);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+ {
+ count += 1;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_unpack(bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->priority))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+ {
+ if (!bcmbal_buf_read_u8(buf, (uint8_t *) &this->weight))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_unpack(&this->rate, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+ {
+ if (!bcmbal_tm_bac_unpack(&this->bac, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+ {
+ if (!bcmbal_tm_creation_mode_unpack(&this->creation_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->ref_count))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_PRIORITY)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_WEIGHT)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+ {
+ if (!bcmbal_tm_bac_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_cfg_data_bounds_check(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_bounds_check(&this->rate))
+ {
+ *failed_prop = BCMBAL_TM_QUEUE_CFG_ID_RATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_BAC)) != 0)
+ {
+ if (!bcmbal_tm_bac_bounds_check(&this->bac))
+ {
+ *failed_prop = BCMBAL_TM_QUEUE_CFG_ID_BAC;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE)) != 0)
+ {
+ switch (this->creation_mode)
+ {
+ case BCMBAL_TM_CREATION_MODE_MANUAL:
+ break;
+ case BCMBAL_TM_CREATION_MODE_AUTO:
+ break;
+ default:
+ *failed_prop = BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_stat_data_set_default(bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+ {
+ this->packets_ok = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+ {
+ this->bytes_ok = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+ {
+ this->packets_discarded = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+ {
+ this->bytes_discarded = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_pack(const bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->packets_ok))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->bytes_ok))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->packets_discarded))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+ {
+ if (!bcmbal_buf_write_u64(buf, this->bytes_discarded))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_stat_data_get_packed_length(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+ {
+ count += 8;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+ {
+ count += 8;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_unpack(bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->packets_ok))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->bytes_ok))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->packets_discarded))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+ {
+ if (!bcmbal_buf_read_u64(buf, &this->bytes_discarded))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_OK)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_OK)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_PACKETS_DISCARDED)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_STAT_ID_BYTES_DISCARDED)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 8))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_stat_data_bounds_check(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_stat_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_queue_ind_data_set_default(bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+ {
+ this->ret = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_pack(const bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, this->ret))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_queue_ind_data_get_packed_length(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_unpack(bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->ret))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_QUEUE_IND_ID_RET)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_queue_ind_data_bounds_check(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_ind_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_key_set_default(bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+ {
+ this->dir = (bcmbal_tm_sched_dir) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+ {
+ this->id = (bcmbal_tm_sched_id) 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_pack(const bcmbal_tm_sched_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+ {
+ if (!bcmbal_tm_sched_dir_pack(this->dir, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, (uint32_t) this->id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_key_get_packed_length(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_unpack(bcmbal_tm_sched_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+ {
+ if (!bcmbal_tm_sched_dir_unpack(&this->dir, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, (uint32_t *) &this->id))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_ID)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_key_bounds_check(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_key_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_KEY_ID_DIR)) != 0)
+ {
+ switch (this->dir)
+ {
+ case BCMBAL_TM_SCHED_DIR_US:
+ break;
+ case BCMBAL_TM_SCHED_DIR_DS:
+ break;
+ default:
+ *failed_prop = BCMBAL_TM_SCHED_KEY_ID_DIR;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_cfg_data_set_default(bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+ {
+ this->owner.type = BCMBAL_TM_SCHED_OWNER_TYPE_UNDEFINED;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+ {
+ this->sched_type = BCMBAL_TM_SCHED_TYPE_NONE;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+ {
+ this->sched_parent.presence_mask = (bcmbal_tm_sched_parent_id) 0;
+ this->sched_parent.sched_id = (bcmbal_tm_sched_id) 0;
+ this->sched_parent.priority = (bcmbal_tm_priority) 0;
+ this->sched_parent.weight = (bcmbal_tm_weight) 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+ {
+ this->sched_child_type = BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+ {
+ this->rate.presence_mask = (bcmbal_tm_shaping_id) 0;
+ this->rate.sbr = 0;
+ this->rate.pbr = 0;
+ this->rate.burst = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+ {
+ this->tcont_sla.presence_mask = (bcmbal_tm_tcont_sla_id) 0;
+ this->tcont_sla.extra_bw_elig = BCMBAL_EXTRA_BW_ELIGIBILITY_TYPE_NONE;
+ this->tcont_sla.nrt_cbr = 0;
+ this->tcont_sla.rt_cbr = 0;
+ this->tcont_sla.rt_profile = 0;
+ this->tcont_sla.nrt_profile = 0;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+ {
+ this->creation_mode = BCMBAL_TM_CREATION_MODE_MANUAL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+ {
+ this->queues.len = 0;
+ this->queues.val = NULL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+ {
+ this->sub_scheds.len = 0;
+ this->sub_scheds.val = NULL;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+ {
+ this->num_priorities = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_pack(const bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_tm_sched_owner_pack(&this->owner, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+ {
+ if (!bcmbal_tm_sched_type_pack(this->sched_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+ {
+ if (!bcmbal_tm_sched_parent_pack(&this->sched_parent, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+ {
+ if (!bcmbal_tm_sched_child_type_pack(this->sched_child_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_pack(&this->rate, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+ {
+ if (!bcmbal_tm_tcont_sla_pack(&this->tcont_sla, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+ {
+ if (!bcmbal_tm_creation_mode_pack(this->creation_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+ {
+ if (!bcmbal_tm_queue_id_list_u8_pack(&this->queues, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+ {
+ if (!bcmbal_tm_sched_id_list_u8_pack(&this->sub_scheds, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+ {
+ if (!bcmbal_buf_write_u8(buf, this->num_priorities))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_cfg_data_get_packed_length(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+ {
+ count += bcmbal_tm_sched_owner_get_packed_length(&this->owner);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+ {
+ count += bcmbal_tm_sched_parent_get_packed_length(&this->sched_parent);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+ {
+ count += bcmbal_tm_shaping_get_packed_length(&this->rate);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+ {
+ count += bcmbal_tm_tcont_sla_get_packed_length(&this->tcont_sla);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+ {
+ count += 1;
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+ {
+ count += bcmbal_tm_queue_id_list_u8_get_packed_length(&this->queues);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+ {
+ count += bcmbal_tm_sched_id_list_u8_get_packed_length(&this->sub_scheds);
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+ {
+ count += 1;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_unpack(bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_tm_sched_owner_unpack(&this->owner, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+ {
+ if (!bcmbal_tm_sched_type_unpack(&this->sched_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+ {
+ if (!bcmbal_tm_sched_parent_unpack(&this->sched_parent, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+ {
+ if (!bcmbal_tm_sched_child_type_unpack(&this->sched_child_type, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_unpack(&this->rate, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+ {
+ if (!bcmbal_tm_tcont_sla_unpack(&this->tcont_sla, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+ {
+ if (!bcmbal_tm_creation_mode_unpack(&this->creation_mode, buf))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+ {
+ if (!bcmbal_tm_queue_id_list_u8_unpack(&this->queues, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+ {
+ if (!bcmbal_tm_sched_id_list_u8_unpack(&this->sub_scheds, buf, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+ {
+ if (!bcmbal_buf_read_u8(buf, &this->num_priorities))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_tm_sched_owner_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+ {
+ if (!bcmbal_tm_sched_parent_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+ {
+ if (!bcmbal_tm_tcont_sla_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+ {
+ if (!bcmbal_tm_queue_id_list_u8_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+ {
+ if (!bcmbal_tm_sched_id_list_u8_scan(packed, extra_mem))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_NUM_PRIORITIES)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 1))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_cfg_data_bounds_check(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_cfg_id *failed_prop)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_OWNER)) != 0)
+ {
+ if (!bcmbal_tm_sched_owner_bounds_check(&this->owner))
+ {
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_OWNER;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE)) != 0)
+ {
+ switch (this->sched_type)
+ {
+ case BCMBAL_TM_SCHED_TYPE_NONE:
+ break;
+ case BCMBAL_TM_SCHED_TYPE_WFQ:
+ break;
+ case BCMBAL_TM_SCHED_TYPE_SP:
+ break;
+ case BCMBAL_TM_SCHED_TYPE_SP_WFQ:
+ break;
+ default:
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SCHED_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT)) != 0)
+ {
+ if (!bcmbal_tm_sched_parent_bounds_check(&this->sched_parent))
+ {
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SCHED_PARENT;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE)) != 0)
+ {
+ switch (this->sched_child_type)
+ {
+ case BCMBAL_TM_SCHED_CHILD_TYPE_QUEUE:
+ break;
+ case BCMBAL_TM_SCHED_CHILD_TYPE_SCHED:
+ break;
+ default:
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SCHED_CHILD_TYPE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_RATE)) != 0)
+ {
+ if (!bcmbal_tm_shaping_bounds_check(&this->rate))
+ {
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_RATE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA)) != 0)
+ {
+ if (!bcmbal_tm_tcont_sla_bounds_check(&this->tcont_sla))
+ {
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_TCONT_SLA;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE)) != 0)
+ {
+ switch (this->creation_mode)
+ {
+ case BCMBAL_TM_CREATION_MODE_MANUAL:
+ break;
+ case BCMBAL_TM_CREATION_MODE_AUTO:
+ break;
+ default:
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) != 0)
+ {
+ if (!bcmbal_tm_queue_id_list_u8_bounds_check(&this->queues))
+ {
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_QUEUES;
+ return BCMOS_FALSE;
+ }
+ }
+
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS)) != 0)
+ {
+ if (!bcmbal_tm_sched_id_list_u8_bounds_check(&this->sub_scheds))
+ {
+ *failed_prop = BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS;
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+void bcmbal_tm_sched_ind_data_set_default(bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+ {
+ this->ret = 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_pack(const bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+ {
+ if (!bcmbal_buf_write_u32(buf, this->ret))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+uint32_t bcmbal_tm_sched_ind_data_get_packed_length(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present)
+{
+ uint32_t count = 0;
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+ {
+ count += 4;
+ }
+
+ return count;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_unpack(bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+ {
+ if (!bcmbal_buf_read_u32(buf, &this->ret))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present)
+{
+ if ((fields_present & (1ULL << BCMBAL_TM_SCHED_IND_ID_RET)) != 0)
+ {
+ if (!bcmbal_buf_skip(packed, 4))
+ {
+ return BCMOS_FALSE;
+ }
+ }
+
+ return BCMOS_TRUE;
+}
+
+/******************************************************************************/
+bcmos_bool bcmbal_tm_sched_ind_data_bounds_check(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_ind_id *failed_prop)
+{
+ return BCMOS_TRUE;
+}
+
+bcmos_bool bcmbal_obj_has_tag(bcmbal_obj_id obj, bcmbal_obj_tag tag)
+{
+ switch (obj)
+ {
+ default:
+ return BCMOS_FALSE;
+ }
+}
diff --git a/bal_release/src/lib/libobjmsg/bal_model_funcs.h b/bal_release/src/lib/libobjmsg/bal_model_funcs.h
new file mode 100644
index 0000000..a0f5dd0
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_model_funcs.h
@@ -0,0 +1,3441 @@
+#ifndef BAL_MODEL_FUNCS
+#define BAL_MODEL_FUNCS
+
+#include "bcmos_system.h"
+#include "bcmos_errno.h"
+#include "bal_buf.h"
+#include "bal_model_ids.h"
+#include "bal_model_types.h"
+
+/** Packs a bcmbal_access_terminal_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_access_terminal_cfg_id_pack(bcmbal_access_terminal_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_access_terminal_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_access_terminal_cfg_id_unpack(bcmbal_access_terminal_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_access_terminal_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_access_terminal_ind_id_pack(bcmbal_access_terminal_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_access_terminal_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_access_terminal_ind_id_unpack(bcmbal_access_terminal_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_access_terminal_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_access_terminal_key_id_pack(bcmbal_access_terminal_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_access_terminal_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_access_terminal_key_id_unpack(bcmbal_access_terminal_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_action_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_action_id_pack(bcmbal_action_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_action_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_action_id_unpack(bcmbal_action_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_action_cmd_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_action_cmd_id_pack(bcmbal_action_cmd_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_action_cmd_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_action_cmd_id_unpack(bcmbal_action_cmd_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_classifier_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_classifier_id_pack(bcmbal_classifier_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_classifier_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_classifier_id_unpack(bcmbal_classifier_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_pkt_tag_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_pkt_tag_type_pack(bcmbal_pkt_tag_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_pkt_tag_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_pkt_tag_type_unpack(bcmbal_pkt_tag_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_control to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_control_pack(bcmbal_control this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_control from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_control_unpack(bcmbal_control *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_dest_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_dest_type_pack(bcmbal_dest_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_dest_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_dest_type_unpack(bcmbal_dest_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_ds_miss_mode to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_ds_miss_mode_pack(bcmbal_ds_miss_mode this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_ds_miss_mode from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_ds_miss_mode_unpack(bcmbal_ds_miss_mode *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_extra_bw_eligibility_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_extra_bw_eligibility_type_pack(bcmbal_extra_bw_eligibility_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_extra_bw_eligibility_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_extra_bw_eligibility_type_unpack(bcmbal_extra_bw_eligibility_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_flow_cfg_id_pack(bcmbal_flow_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_flow_cfg_id_unpack(bcmbal_flow_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_flow_ind_id_pack(bcmbal_flow_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_flow_ind_id_unpack(bcmbal_flow_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_flow_key_id_pack(bcmbal_flow_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_flow_key_id_unpack(bcmbal_flow_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_stat_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_flow_stat_id_pack(bcmbal_flow_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_stat_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_flow_stat_id_unpack(bcmbal_flow_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_flow_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_flow_type_pack(bcmbal_flow_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_flow_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_flow_type_unpack(bcmbal_flow_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_group_cfg_id_pack(bcmbal_group_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_group_cfg_id_unpack(bcmbal_group_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_group_key_id_pack(bcmbal_group_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_group_key_id_unpack(bcmbal_group_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_member_cmd to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_group_member_cmd_pack(bcmbal_group_member_cmd this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_member_cmd from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_group_member_cmd_unpack(bcmbal_group_member_cmd *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_group_owner to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_group_owner_pack(bcmbal_group_owner this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_group_owner from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_group_owner_unpack(bcmbal_group_owner *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_interface_cfg_id_pack(bcmbal_interface_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_interface_cfg_id_unpack(bcmbal_interface_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_interface_ind_id_pack(bcmbal_interface_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_interface_ind_id_unpack(bcmbal_interface_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_interface_key_id_pack(bcmbal_interface_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_interface_key_id_unpack(bcmbal_interface_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_interface_stat_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_interface_stat_id_pack(bcmbal_interface_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_interface_stat_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_interface_stat_id_unpack(bcmbal_interface_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_intf_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_intf_type_pack(bcmbal_intf_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_intf_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_intf_type_unpack(bcmbal_intf_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_iwf_mode to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_iwf_mode_pack(bcmbal_iwf_mode this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_iwf_mode from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_iwf_mode_unpack(bcmbal_iwf_mode *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_packet_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_packet_cfg_id_pack(bcmbal_packet_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_packet_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_packet_cfg_id_unpack(bcmbal_packet_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_packet_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_packet_ind_id_pack(bcmbal_packet_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_packet_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_packet_ind_id_unpack(bcmbal_packet_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_packet_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_packet_key_id_pack(bcmbal_packet_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_packet_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_packet_key_id_unpack(bcmbal_packet_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_sla_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_sla_id_pack(bcmbal_sla_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_sla_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_sla_id_unpack(bcmbal_sla_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_state to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_state_pack(bcmbal_state this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_state from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_state_unpack(bcmbal_state *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_status to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_status_pack(bcmbal_status this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_status from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_status_unpack(bcmbal_status *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_pack(bcmbal_subscriber_terminal_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_id_unpack(bcmbal_subscriber_terminal_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_id_pack(bcmbal_subscriber_terminal_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_id_unpack(bcmbal_subscriber_terminal_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_id_pack(bcmbal_subscriber_terminal_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_id_unpack(bcmbal_subscriber_terminal_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_subscriber_terminal_stat_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_id_pack(bcmbal_subscriber_terminal_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_subscriber_terminal_stat_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_id_unpack(bcmbal_subscriber_terminal_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_bac_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_bac_type_pack(bcmbal_tm_bac_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_bac_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_bac_type_unpack(bcmbal_tm_bac_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_creation_mode to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_creation_mode_pack(bcmbal_tm_creation_mode this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_creation_mode from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_creation_mode_unpack(bcmbal_tm_creation_mode *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_queue_cfg_id_pack(bcmbal_tm_queue_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_queue_cfg_id_unpack(bcmbal_tm_queue_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_queue_ind_id_pack(bcmbal_tm_queue_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_queue_ind_id_unpack(bcmbal_tm_queue_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_queue_key_id_pack(bcmbal_tm_queue_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_queue_key_id_unpack(bcmbal_tm_queue_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_queue_stat_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_queue_stat_id_pack(bcmbal_tm_queue_stat_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_stat_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_queue_stat_id_unpack(bcmbal_tm_queue_stat_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_cfg_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_cfg_id_pack(bcmbal_tm_sched_cfg_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_cfg_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_cfg_id_unpack(bcmbal_tm_sched_cfg_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_child_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_child_type_pack(bcmbal_tm_sched_child_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_child_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_child_type_unpack(bcmbal_tm_sched_child_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_dir to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_dir_pack(bcmbal_tm_sched_dir this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_dir from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_dir_unpack(bcmbal_tm_sched_dir *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_ind_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_ind_id_pack(bcmbal_tm_sched_ind_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_ind_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_ind_id_unpack(bcmbal_tm_sched_ind_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_key_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_key_id_pack(bcmbal_tm_sched_key_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_key_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_key_id_unpack(bcmbal_tm_sched_key_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_owner_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_owner_type_pack(bcmbal_tm_sched_owner_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_owner_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_owner_type_unpack(bcmbal_tm_sched_owner_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_owner_agg_port_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_pack(bcmbal_tm_sched_owner_agg_port_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_owner_agg_port_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_owner_agg_port_id_unpack(bcmbal_tm_sched_owner_agg_port_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_parent_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_parent_id_pack(bcmbal_tm_sched_parent_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_parent_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_parent_id_unpack(bcmbal_tm_sched_parent_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_sched_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_sched_type_pack(bcmbal_tm_sched_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_sched_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_sched_type_unpack(bcmbal_tm_sched_type *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_shaping_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_shaping_id_pack(bcmbal_tm_shaping_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_shaping_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_shaping_id_unpack(bcmbal_tm_shaping_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_tm_tcont_sla_id to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_tm_tcont_sla_id_pack(bcmbal_tm_tcont_sla_id this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_tcont_sla_id from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_tm_tcont_sla_id_unpack(bcmbal_tm_tcont_sla_id *this, bcmbal_buf *buf);
+
+/** Packs a bcmbal_trx_type to bytes
+ *
+ * \param this The enumeration to pack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the pack was successful
+ */
+bcmos_bool bcmbal_trx_type_pack(bcmbal_trx_type this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_trx_type from bytes
+ *
+ * \param this Pointer to the enumeration to unpack
+ * \param buf Pointer to the buffer to write to
+ * \return Whether or not the unpack was successful
+ */
+bcmos_bool bcmbal_trx_type_unpack(bcmbal_trx_type *this, bcmbal_buf *buf);
+
+/** Initializes a bcmbal_action struct. This sets all fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_action_set_default(bcmbal_action *this);
+
+/** Packs a bcmbal_action to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_action_pack(const bcmbal_action *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_action would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_action_get_packed_length(const bcmbal_action *this);
+
+/** Unpacks a bcmbal_action from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_action_unpack(bcmbal_action *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_action struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_action_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_action is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_action_bounds_check(const bcmbal_action *this);
+
+/** Initializes a bcmbal_aggregation_port_id_list_u8 struct. This sets all
+ * fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_aggregation_port_id_list_u8_set_default(bcmbal_aggregation_port_id_list_u8 *this);
+
+/** Packs a bcmbal_aggregation_port_id_list_u8 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_pack(const bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_aggregation_port_id_list_u8 would
+ * occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_aggregation_port_id_list_u8_get_packed_length(const bcmbal_aggregation_port_id_list_u8 *this);
+
+/** Unpacks a bcmbal_aggregation_port_id_list_u8 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_unpack(bcmbal_aggregation_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_aggregation_port_id_list_u8 struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_aggregation_port_id_list_u8 is out of
+ * bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_aggregation_port_id_list_u8_bounds_check(const bcmbal_aggregation_port_id_list_u8 *this);
+
+/** Initializes a bcmbal_classifier struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_classifier_set_default(bcmbal_classifier *this);
+
+/** Packs a bcmbal_classifier to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_classifier_pack(const bcmbal_classifier *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_classifier would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_classifier_get_packed_length(const bcmbal_classifier *this);
+
+/** Unpacks a bcmbal_classifier from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_classifier_unpack(bcmbal_classifier *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_classifier struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_classifier_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_classifier is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_classifier_bounds_check(const bcmbal_classifier *this);
+
+/** Initializes a bcmbal_dest struct. This sets all fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_dest_set_default(bcmbal_dest *this);
+
+/** Packs a bcmbal_dest to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_dest_pack(const bcmbal_dest *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_dest would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_dest_get_packed_length(const bcmbal_dest *this);
+
+/** Unpacks a bcmbal_dest from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_dest_unpack(bcmbal_dest *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_dest struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_dest_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_dest is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_dest_bounds_check(const bcmbal_dest *this);
+
+/** Initializes a bcmbal_flow_id_list_u32 struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_flow_id_list_u32_set_default(bcmbal_flow_id_list_u32 *this);
+
+/** Packs a bcmbal_flow_id_list_u32 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_id_list_u32_pack(const bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_flow_id_list_u32 would occupy on the
+ * wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_flow_id_list_u32_get_packed_length(const bcmbal_flow_id_list_u32 *this);
+
+/** Unpacks a bcmbal_flow_id_list_u32 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_id_list_u32_unpack(bcmbal_flow_id_list_u32 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_flow_id_list_u32 struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_flow_id_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_flow_id_list_u32 is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_id_list_u32_bounds_check(const bcmbal_flow_id_list_u32 *this);
+
+/** Initializes a bcmbal_tm_queue_ref struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_queue_ref_set_default(bcmbal_tm_queue_ref *this);
+
+/** Packs a bcmbal_tm_queue_ref to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_ref_pack(const bcmbal_tm_queue_ref *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_queue_ref from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_ref_unpack(bcmbal_tm_queue_ref *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_queue_ref struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_queue_ref_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_queue_ref is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_ref_bounds_check(const bcmbal_tm_queue_ref *this);
+
+/** Initializes a bcmbal_group_member_info struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_group_member_info_set_default(bcmbal_group_member_info *this);
+
+/** Packs a bcmbal_group_member_info to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_member_info_pack(const bcmbal_group_member_info *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_group_member_info would occupy on the
+ * wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_group_member_info_get_packed_length(const bcmbal_group_member_info *this);
+
+/** Unpacks a bcmbal_group_member_info from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_member_info_unpack(bcmbal_group_member_info *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_group_member_info struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_group_member_info_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_group_member_info is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_member_info_bounds_check(const bcmbal_group_member_info *this);
+
+/** Initializes a bcmbal_group_member_info_list_u16 struct. This sets all
+ * fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_group_member_info_list_u16_set_default(bcmbal_group_member_info_list_u16 *this);
+
+/** Packs a bcmbal_group_member_info_list_u16 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_pack(const bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_group_member_info_list_u16 would
+ * occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_group_member_info_list_u16_get_packed_length(const bcmbal_group_member_info_list_u16 *this);
+
+/** Unpacks a bcmbal_group_member_info_list_u16 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_unpack(bcmbal_group_member_info_list_u16 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_group_member_info_list_u16 struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_group_member_info_list_u16 is out of
+ * bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_member_info_list_u16_bounds_check(const bcmbal_group_member_info_list_u16 *this);
+
+/** Initializes a bcmbal_password struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_password_set_default(bcmbal_password *this);
+
+/** Packs a bcmbal_password to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_password_pack(const bcmbal_password *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_password from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_password_unpack(bcmbal_password *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_password struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_password_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_password is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_password_bounds_check(const bcmbal_password *this);
+
+/** Initializes a bcmbal_registration_id struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_registration_id_set_default(bcmbal_registration_id *this);
+
+/** Packs a bcmbal_registration_id to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_registration_id_pack(const bcmbal_registration_id *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_registration_id from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_registration_id_unpack(bcmbal_registration_id *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_registration_id struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_registration_id_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_registration_id is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_registration_id_bounds_check(const bcmbal_registration_id *this);
+
+/** Initializes a bcmbal_serial_number struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_serial_number_set_default(bcmbal_serial_number *this);
+
+/** Packs a bcmbal_serial_number to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_serial_number_pack(const bcmbal_serial_number *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_serial_number from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_serial_number_unpack(bcmbal_serial_number *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_serial_number struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_serial_number_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_serial_number is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_serial_number_bounds_check(const bcmbal_serial_number *this);
+
+/** Initializes a bcmbal_service_port_id_list_u8 struct. This sets all fields
+ * to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_service_port_id_list_u8_set_default(bcmbal_service_port_id_list_u8 *this);
+
+/** Packs a bcmbal_service_port_id_list_u8 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_pack(const bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_service_port_id_list_u8 would occupy
+ * on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_service_port_id_list_u8_get_packed_length(const bcmbal_service_port_id_list_u8 *this);
+
+/** Unpacks a bcmbal_service_port_id_list_u8 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_unpack(bcmbal_service_port_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_service_port_id_list_u8 struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_service_port_id_list_u8 is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_service_port_id_list_u8_bounds_check(const bcmbal_service_port_id_list_u8 *this);
+
+/** Initializes a bcmbal_sla struct. This sets all fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_sla_set_default(bcmbal_sla *this);
+
+/** Packs a bcmbal_sla to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_sla_pack(const bcmbal_sla *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_sla would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_sla_get_packed_length(const bcmbal_sla *this);
+
+/** Unpacks a bcmbal_sla from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_sla_unpack(bcmbal_sla *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_sla struct and collects memory requirements above
+ * and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_sla is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_sla_bounds_check(const bcmbal_sla *this);
+
+/** Initializes a bcmbal_sub_id_list_u16 struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_sub_id_list_u16_set_default(bcmbal_sub_id_list_u16 *this);
+
+/** Packs a bcmbal_sub_id_list_u16 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_sub_id_list_u16_pack(const bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_sub_id_list_u16 would occupy on the
+ * wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_sub_id_list_u16_get_packed_length(const bcmbal_sub_id_list_u16 *this);
+
+/** Unpacks a bcmbal_sub_id_list_u16 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_sub_id_list_u16_unpack(bcmbal_sub_id_list_u16 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_sub_id_list_u16 struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_sub_id_list_u16_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_sub_id_list_u16 is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_sub_id_list_u16_bounds_check(const bcmbal_sub_id_list_u16 *this);
+
+/** Initializes a bcmbal_tm_red struct. This sets all fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_red_set_default(bcmbal_tm_red *this);
+
+/** Packs a bcmbal_tm_red to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_red_pack(const bcmbal_tm_red *this, bcmbal_buf *buf);
+
+/** Unpacks a bcmbal_tm_red from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_red_unpack(bcmbal_tm_red *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_red struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_red_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_red is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_red_bounds_check(const bcmbal_tm_red *this);
+
+/** Initializes a bcmbal_tm_bac struct. This sets all fields to default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_bac_set_default(bcmbal_tm_bac *this);
+
+/** Packs a bcmbal_tm_bac to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_bac_pack(const bcmbal_tm_bac *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_bac would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_bac_get_packed_length(const bcmbal_tm_bac *this);
+
+/** Unpacks a bcmbal_tm_bac from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_bac_unpack(bcmbal_tm_bac *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_bac struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_bac_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_bac is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_bac_bounds_check(const bcmbal_tm_bac *this);
+
+/** Initializes a bcmbal_tm_queue_id_list_u8 struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_queue_id_list_u8_set_default(bcmbal_tm_queue_id_list_u8 *this);
+
+/** Packs a bcmbal_tm_queue_id_list_u8 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_pack(const bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_id_list_u8 would occupy on
+ * the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_queue_id_list_u8_get_packed_length(const bcmbal_tm_queue_id_list_u8 *this);
+
+/** Unpacks a bcmbal_tm_queue_id_list_u8 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_unpack(bcmbal_tm_queue_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_queue_id_list_u8 struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_queue_id_list_u8 is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_id_list_u8_bounds_check(const bcmbal_tm_queue_id_list_u8 *this);
+
+/** Initializes a bcmbal_tm_sched_id_list_u8 struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_sched_id_list_u8_set_default(bcmbal_tm_sched_id_list_u8 *this);
+
+/** Packs a bcmbal_tm_sched_id_list_u8 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_pack(const bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_id_list_u8 would occupy on
+ * the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_sched_id_list_u8_get_packed_length(const bcmbal_tm_sched_id_list_u8 *this);
+
+/** Unpacks a bcmbal_tm_sched_id_list_u8 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_unpack(bcmbal_tm_sched_id_list_u8 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_sched_id_list_u8 struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_sched_id_list_u8 is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_id_list_u8_bounds_check(const bcmbal_tm_sched_id_list_u8 *this);
+
+/** Initializes a bcmbal_tm_sched_owner struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_sched_owner_set_default(bcmbal_tm_sched_owner *this);
+
+/** Packs a bcmbal_tm_sched_owner to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_owner_pack(const bcmbal_tm_sched_owner *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_owner would occupy on the
+ * wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_sched_owner_get_packed_length(const bcmbal_tm_sched_owner *this);
+
+/** Unpacks a bcmbal_tm_sched_owner from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_owner_unpack(bcmbal_tm_sched_owner *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_sched_owner struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_sched_owner_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_sched_owner is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_owner_bounds_check(const bcmbal_tm_sched_owner *this);
+
+/** Initializes a bcmbal_tm_sched_parent struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_sched_parent_set_default(bcmbal_tm_sched_parent *this);
+
+/** Packs a bcmbal_tm_sched_parent to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_parent_pack(const bcmbal_tm_sched_parent *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_parent would occupy on the
+ * wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_sched_parent_get_packed_length(const bcmbal_tm_sched_parent *this);
+
+/** Unpacks a bcmbal_tm_sched_parent from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_parent_unpack(bcmbal_tm_sched_parent *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_sched_parent struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_sched_parent_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_sched_parent is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_parent_bounds_check(const bcmbal_tm_sched_parent *this);
+
+/** Initializes a bcmbal_tm_shaping struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_shaping_set_default(bcmbal_tm_shaping *this);
+
+/** Packs a bcmbal_tm_shaping to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_shaping_pack(const bcmbal_tm_shaping *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_shaping would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_shaping_get_packed_length(const bcmbal_tm_shaping *this);
+
+/** Unpacks a bcmbal_tm_shaping from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_shaping_unpack(bcmbal_tm_shaping *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_shaping struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_shaping_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_shaping is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_shaping_bounds_check(const bcmbal_tm_shaping *this);
+
+/** Initializes a bcmbal_tm_tcont_sla struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_tm_tcont_sla_set_default(bcmbal_tm_tcont_sla *this);
+
+/** Packs a bcmbal_tm_tcont_sla to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_tcont_sla_pack(const bcmbal_tm_tcont_sla *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_tm_tcont_sla would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_tcont_sla_get_packed_length(const bcmbal_tm_tcont_sla *this);
+
+/** Unpacks a bcmbal_tm_tcont_sla from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_tcont_sla_unpack(bcmbal_tm_tcont_sla *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_tm_tcont_sla struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_tcont_sla_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_tm_tcont_sla is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_tcont_sla_bounds_check(const bcmbal_tm_tcont_sla *this);
+
+/** Initializes a bcmbal_u8_list_u32 struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ */
+void bcmbal_u8_list_u32_set_default(bcmbal_u8_list_u32 *this);
+
+/** Packs a bcmbal_u8_list_u32 to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_u8_list_u32_pack(const bcmbal_u8_list_u32 *this, bcmbal_buf *buf);
+
+/** Gets the number of bytes that a bcmbal_u8_list_u32 would occupy on the wire
+ *
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_u8_list_u32_get_packed_length(const bcmbal_u8_list_u32 *this);
+
+/** Unpacks a bcmbal_u8_list_u32 from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_u8_list_u32_unpack(bcmbal_u8_list_u32 *this, bcmbal_buf *buf, void **extra_mem);
+
+/** Scans past a packed bcmbal_u8_list_u32 struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_u8_list_u32_scan(bcmbal_buf *packed, uint32_t *extra_mem);
+
+/** Checks if any field in the bcmbal_u8_list_u32 is out of bounds
+ *
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_u8_list_u32_bounds_check(const bcmbal_u8_list_u32 *this);
+
+/** Initializes a bcmbal_access_terminal_key struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_access_terminal_key_set_default(bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_access_terminal_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_key_pack(const bcmbal_access_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_access_terminal_key would occupy on
+ * the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_access_terminal_key_get_packed_length(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_access_terminal_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_key_unpack(bcmbal_access_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_access_terminal_key struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_access_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_access_terminal_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_key_bounds_check(const bcmbal_access_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_key_id *failed_prop);
+
+/** Initializes a bcmbal_access_terminal_cfg_data struct. This sets all fields
+ * to default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_access_terminal_cfg_data_set_default(bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_access_terminal_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_pack(const bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_access_terminal_cfg_data would occupy
+ * on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_access_terminal_cfg_data_get_packed_length(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_access_terminal_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_unpack(bcmbal_access_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_access_terminal_cfg_data struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_access_terminal_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_cfg_data_bounds_check(const bcmbal_access_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_access_terminal_ind_data struct. This sets all fields
+ * to default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_access_terminal_ind_data_set_default(bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_access_terminal_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_pack(const bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_access_terminal_ind_data would occupy
+ * on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_access_terminal_ind_data_get_packed_length(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_access_terminal_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_unpack(bcmbal_access_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_access_terminal_ind_data struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_access_terminal_ind_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_access_terminal_ind_data_bounds_check(const bcmbal_access_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_access_terminal_ind_id *failed_prop);
+
+/** Initializes a bcmbal_flow_key struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_flow_key_set_default(bcmbal_flow_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_key_pack(const bcmbal_flow_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_key would occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_flow_key_get_packed_length(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_key_unpack(bcmbal_flow_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_key struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_flow_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_key_bounds_check(const bcmbal_flow_key *this, bcmbal_presence_mask fields_present, bcmbal_flow_key_id *failed_prop);
+
+/** Initializes a bcmbal_flow_cfg_data struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_flow_cfg_data_set_default(bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_cfg_data_pack(const bcmbal_flow_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_cfg_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_flow_cfg_data_get_packed_length(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_cfg_data_unpack(bcmbal_flow_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_cfg_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_flow_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_cfg_data_bounds_check(const bcmbal_flow_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_flow_stat_data struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_flow_stat_data_set_default(bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_stat_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_stat_data_pack(const bcmbal_flow_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_stat_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_flow_stat_data_get_packed_length(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_stat_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_stat_data_unpack(bcmbal_flow_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_stat_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_flow_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_stat_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_stat_data_bounds_check(const bcmbal_flow_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_stat_id *failed_prop);
+
+/** Initializes a bcmbal_flow_ind_data struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_flow_ind_data_set_default(bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_flow_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_ind_data_pack(const bcmbal_flow_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_flow_ind_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_flow_ind_data_get_packed_length(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_flow_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_ind_data_unpack(bcmbal_flow_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_flow_ind_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_flow_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_flow_ind_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_flow_ind_data_bounds_check(const bcmbal_flow_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_flow_ind_id *failed_prop);
+
+/** Initializes a bcmbal_group_key struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_group_key_set_default(bcmbal_group_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_group_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_key_pack(const bcmbal_group_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_group_key would occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_group_key_get_packed_length(const bcmbal_group_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_group_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_key_unpack(bcmbal_group_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_group_key struct and collects memory requirements
+ * above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_group_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_group_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_key_bounds_check(const bcmbal_group_key *this, bcmbal_presence_mask fields_present, bcmbal_group_key_id *failed_prop);
+
+/** Initializes a bcmbal_group_cfg_data struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_group_cfg_data_set_default(bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_group_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_cfg_data_pack(const bcmbal_group_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_group_cfg_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_group_cfg_data_get_packed_length(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_group_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_cfg_data_unpack(bcmbal_group_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_group_cfg_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_group_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_group_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_group_cfg_data_bounds_check(const bcmbal_group_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_group_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_interface_key struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_interface_key_set_default(bcmbal_interface_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_key_pack(const bcmbal_interface_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_key would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_interface_key_get_packed_length(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_key_unpack(bcmbal_interface_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_key struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_interface_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_key_bounds_check(const bcmbal_interface_key *this, bcmbal_presence_mask fields_present, bcmbal_interface_key_id *failed_prop);
+
+/** Initializes a bcmbal_interface_cfg_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_interface_cfg_data_set_default(bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_cfg_data_pack(const bcmbal_interface_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_cfg_data would occupy on
+ * the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_interface_cfg_data_get_packed_length(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_cfg_data_unpack(bcmbal_interface_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_cfg_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_interface_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_cfg_data_bounds_check(const bcmbal_interface_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_interface_stat_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_interface_stat_data_set_default(bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_stat_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_stat_data_pack(const bcmbal_interface_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_stat_data would occupy on
+ * the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_interface_stat_data_get_packed_length(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_stat_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_stat_data_unpack(bcmbal_interface_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_stat_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_interface_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_stat_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_stat_data_bounds_check(const bcmbal_interface_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_stat_id *failed_prop);
+
+/** Initializes a bcmbal_interface_ind_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_interface_ind_data_set_default(bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_interface_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_ind_data_pack(const bcmbal_interface_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_interface_ind_data would occupy on
+ * the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_interface_ind_data_get_packed_length(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_interface_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_ind_data_unpack(bcmbal_interface_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_interface_ind_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_interface_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_interface_ind_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_interface_ind_data_bounds_check(const bcmbal_interface_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_interface_ind_id *failed_prop);
+
+/** Initializes a bcmbal_packet_key struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_packet_key_set_default(bcmbal_packet_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_packet_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_key_pack(const bcmbal_packet_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_packet_key would occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_packet_key_get_packed_length(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_packet_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_key_unpack(bcmbal_packet_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_packet_key struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_packet_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_packet_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_key_bounds_check(const bcmbal_packet_key *this, bcmbal_presence_mask fields_present, bcmbal_packet_key_id *failed_prop);
+
+/** Initializes a bcmbal_packet_cfg_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_packet_cfg_data_set_default(bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_packet_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_cfg_data_pack(const bcmbal_packet_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_packet_cfg_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_packet_cfg_data_get_packed_length(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_packet_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_cfg_data_unpack(bcmbal_packet_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_packet_cfg_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_packet_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_packet_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_cfg_data_bounds_check(const bcmbal_packet_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_packet_ind_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_packet_ind_data_set_default(bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_packet_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_ind_data_pack(const bcmbal_packet_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_packet_ind_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_packet_ind_data_get_packed_length(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_packet_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_ind_data_unpack(bcmbal_packet_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_packet_ind_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_packet_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_packet_ind_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_packet_ind_data_bounds_check(const bcmbal_packet_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_packet_ind_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_key struct. This sets all fields
+ * to default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_subscriber_terminal_key_set_default(bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_pack(const bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_key would occupy
+ * on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_subscriber_terminal_key_get_packed_length(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_unpack(bcmbal_subscriber_terminal_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_key struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_key_bounds_check(const bcmbal_subscriber_terminal_key *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_key_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_cfg_data struct. This sets all
+ * fields to default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_subscriber_terminal_cfg_data_set_default(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_pack(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_cfg_data would
+ * occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_subscriber_terminal_cfg_data_get_packed_length(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_unpack(bcmbal_subscriber_terminal_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_cfg_data struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_cfg_data is out of
+ * bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_cfg_data_bounds_check(const bcmbal_subscriber_terminal_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_stat_data struct. This sets all
+ * fields to default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_subscriber_terminal_stat_data_set_default(bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_stat_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_pack(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_stat_data would
+ * occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_subscriber_terminal_stat_data_get_packed_length(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_stat_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_unpack(bcmbal_subscriber_terminal_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_stat_data struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_stat_data is out of
+ * bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_stat_data_bounds_check(const bcmbal_subscriber_terminal_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_stat_id *failed_prop);
+
+/** Initializes a bcmbal_subscriber_terminal_ind_data struct. This sets all
+ * fields to default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_subscriber_terminal_ind_data_set_default(bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_subscriber_terminal_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_pack(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_subscriber_terminal_ind_data would
+ * occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_subscriber_terminal_ind_data_get_packed_length(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_subscriber_terminal_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_unpack(bcmbal_subscriber_terminal_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_subscriber_terminal_ind_data struct and collects
+ * memory requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_subscriber_terminal_ind_data is out of
+ * bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_subscriber_terminal_ind_data_bounds_check(const bcmbal_subscriber_terminal_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_subscriber_terminal_ind_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_key struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_queue_key_set_default(bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_key_pack(const bcmbal_tm_queue_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_key would occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_queue_key_get_packed_length(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_key_unpack(bcmbal_tm_queue_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_key struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_queue_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_key_bounds_check(const bcmbal_tm_queue_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_key_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_cfg_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_queue_cfg_data_set_default(bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_pack(const bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_cfg_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_queue_cfg_data_get_packed_length(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_unpack(bcmbal_tm_queue_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_cfg_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_cfg_data_bounds_check(const bcmbal_tm_queue_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_stat_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_queue_stat_data_set_default(bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_stat_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_pack(const bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_stat_data would occupy on
+ * the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_queue_stat_data_get_packed_length(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_stat_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_unpack(bcmbal_tm_queue_stat_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_stat_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_stat_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_stat_data_bounds_check(const bcmbal_tm_queue_stat_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_stat_id *failed_prop);
+
+/** Initializes a bcmbal_tm_queue_ind_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_queue_ind_data_set_default(bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_queue_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_pack(const bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_queue_ind_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_queue_ind_data_get_packed_length(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_queue_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_unpack(bcmbal_tm_queue_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_queue_ind_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_queue_ind_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_queue_ind_data_bounds_check(const bcmbal_tm_queue_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_queue_ind_id *failed_prop);
+
+/** Initializes a bcmbal_tm_sched_key struct. This sets all fields to default
+ * values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_sched_key_set_default(bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_sched_key to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_key_pack(const bcmbal_tm_sched_key *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_key would occupy on the wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_sched_key_get_packed_length(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_sched_key from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_key_unpack(bcmbal_tm_sched_key *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_sched_key struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_sched_key_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_sched_key is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_key_bounds_check(const bcmbal_tm_sched_key *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_key_id *failed_prop);
+
+/** Initializes a bcmbal_tm_sched_cfg_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_sched_cfg_data_set_default(bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_sched_cfg_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_pack(const bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_cfg_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_sched_cfg_data_get_packed_length(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_sched_cfg_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_unpack(bcmbal_tm_sched_cfg_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_sched_cfg_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_sched_cfg_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_cfg_data_bounds_check(const bcmbal_tm_sched_cfg_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_cfg_id *failed_prop);
+
+/** Initializes a bcmbal_tm_sched_ind_data struct. This sets all fields to
+ * default values.
+ *
+ * \param this Pointer to the structure
+ * \param fields_present Bitmask of which fields are present in the structure.
+ */
+void bcmbal_tm_sched_ind_data_set_default(bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Packs a bcmbal_tm_sched_ind_data to bytes
+ *
+ * \param this Pointer to the object to pack
+ * \param buf Pointer to the buffer to write to
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the pack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_pack(const bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+
+/** Gets the number of bytes that a bcmbal_tm_sched_ind_data would occupy on the
+ * wire
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return The structure size in bytes
+ */
+uint32_t bcmbal_tm_sched_ind_data_get_packed_length(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present);
+
+/** Unpacks a bcmbal_tm_sched_ind_data from bytes
+ *
+ * \param this Pointer to the object to unpack
+ * \param buf Pointer to the buffer to read from
+ * \param extra_mem Pointer to the first location in memory to use to store
+ * pointer fields that are NULL. Setting this to NULL will cause an error when
+ * a NULL pointer is encountered.
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE if the unpack was successful, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_unpack(bcmbal_tm_sched_ind_data *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+
+/** Scans past a packed bcmbal_tm_sched_ind_data struct and collects memory
+ * requirements above and beyond sizeof()
+ *
+ * \param packed A stream pointing to the packed byte stream
+ * \param extra_mem Number of additional storage bytes required
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \return TRUE on success, FALSE on failure
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_scan(bcmbal_buf *packed, uint32_t *extra_mem, bcmbal_presence_mask fields_present);
+
+/** Checks if any field in the bcmbal_tm_sched_ind_data is out of bounds
+ *
+ * \param fields_present Bitmask of which fields are present in the structure.
+ * \param failed_prop Reference to the property that was out of range (only set
+ * on failure)
+ * \return TRUE if all fields are in the correct range, FALSE otherwise
+ */
+bcmos_bool bcmbal_tm_sched_ind_data_bounds_check(const bcmbal_tm_sched_ind_data *this, bcmbal_presence_mask fields_present, bcmbal_tm_sched_ind_id *failed_prop);
+#endif /* BAL_MODEL_FUNCS */
diff --git a/bal_release/src/lib/libobjmsg/bal_msg.c b/bal_release/src/lib/libobjmsg/bal_msg.c
new file mode 100644
index 0000000..285be80
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_msg.c
@@ -0,0 +1,220 @@
+/******************************************************************************
+ *
+ * <:copyright-BRCM:2016:DUAL/GPL:standard
+ *
+ * Copyright (c) 2016 Broadcom
+ * All Rights Reserved
+ *
+ * Unless you and Broadcom execute a separate written software license
+ * agreement governing use of this software, this software is licensed
+ * to you under the terms of the GNU General Public License version 2
+ * (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+ * with the following added to such license:
+ *
+ * As a special exception, the copyright holders of this software give
+ * you permission to link this software with independent modules, and
+ * to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent
+ * module, the terms and conditions of the license of that module.
+ * An independent module is a module which is not derived from this
+ * software. The special exception does not apply to any modifications
+ * of the software.
+ *
+ * Not withstanding the above, under no circumstances may you combine
+ * this software in any way with any other Broadcom software provided
+ * under a license other than the GPL, without Broadcom's express prior
+ * written consent.
+ *
+ * :>
+ *
+ *****************************************************************************/
+
+/**
+ * @file bal_msg.c
+ * @brief BAL message helper functions
+ * @addtogroup ctrlr
+ */
+#include <bal_msg.h>
+#include <bal_obj_msg_pack_unpack.h>
+
+/*
+ * Clone BAL message
+ * Returns payload_ptr of the clone
+ */
+void *bcmbal_msg_clone(void *bal_obj)
+{
+ bal_comm_msg_hdr *msg_hdr = bcmbal_bal_hdr_get(bal_obj);
+ bal_comm_msg_hdr *clone_hdr = NULL;
+ bcmos_errno err = bcmbal_obj_msg_clone(&clone_hdr, msg_hdr);
+ return ((int)err >= 0) ? bcmbal_payload_ptr_get(clone_hdr) : NULL;
+}
+
+/*
+ * Send a BAL message given the payload pointer
+ */
+bcmos_errno bcmbal_msg_send(bcmos_msg_queue *queue, void *msg_payload, bcmos_msg_send_flags flags)
+{
+ bcmos_msg *packed_msg = NULL;
+ bcmos_errno err;
+
+ /* pack and send */
+ err = bcmbal_obj_msg_pack(bcmbal_bal_hdr_get(msg_payload), &packed_msg);
+ if (err != BCM_ERR_OK)
+ return err;
+
+ err = bcmos_msg_send(queue, packed_msg, flags);
+
+ if ((flags & BCMOS_MSG_SEND_NO_FREE_ON_ERROR) == 0)
+ {
+ /* Release the original message */
+ bcmbal_msg_free(msg_payload);
+ }
+ else if (err != BCM_ERR_OK)
+ {
+ /* bcmos_msg_send() failed, but packed_msg wasn't released because of the flag. */
+ bcmos_msg_free(packed_msg);
+ }
+
+ return err;
+}
+
+/*
+ * Call callback in the context of the target module and pass it the BAL message pointer
+ */
+bcmos_errno bcmbal_msg_call(void *msg_payload,
+ bcmos_module_id module, F_bcmos_msg_handler cb, bcmos_msg_send_flags flags)
+{
+ bcmos_msg *m = bcmbal_bcmos_hdr_get(msg_payload);
+ m->handler = cb;
+ return bcmos_msg_send_to_module(module, m, flags);
+}
+
+bcmos_errno bcmbal_msg_recv(bcmos_msg_queue *queue, uint32_t timeout, void **msg_payload)
+{
+ bcmos_errno ret;
+ bcmos_msg *msg;
+ bal_comm_msg_hdr *unpacked_msg = (*msg_payload) ? bcmbal_bal_hdr_get(*msg_payload) : NULL;
+
+ do {
+ ret = bcmos_msg_recv(queue, timeout, &msg);
+ if(BCM_ERR_OK != ret)
+ {
+ bcmos_printf("%s: error during bcmos_msg_recv (error:%s)\n",
+ __FUNCTION__,
+ bcmos_strerror(ret));
+ break;
+ }
+
+ /* Got a message. Now unpack it */
+ ret = bcmbal_obj_msg_unpack(msg, &unpacked_msg);
+ bcmos_msg_free(msg); /* release packed message. It is no longer needed */
+ if (BCM_ERR_OK != ret)
+ {
+ bcmos_printf("%s: bcmbal_obj_msg_unpack (error:%s)\n",
+ __FUNCTION__, bcmos_strerror(ret));
+ break;
+ }
+
+ /* If message was allocated in unpack - assign it */
+ if (! *msg_payload)
+ *msg_payload = bcmbal_payload_ptr_get(unpacked_msg);
+
+ } while (0);
+
+ return ret;
+}
+
+int32_t bcmbal_bal_msg_hdr_get_packed_length(void)
+{
+ return 21; /* See bcmbal_bal_msg_hdr_pack() */
+}
+
+static int32_t bcmbal_bal_msg_hdr_get_ex_id_offset(void)
+{
+ return 16; /* See bcmbal_bal_msg_hdr_pack() */
+}
+
+/** Pack a BAL message header to a byte stream */
+bcmos_errno bcmbal_bal_msg_hdr_pack(const bal_comm_msg_hdr *msg, bcmbal_buf *buf)
+{
+ bcmos_bool ret;
+
+ /* bcmos_msg header pack... (8 bytes post-pack) */
+ ret = bcmbal_buf_write_u32(buf, buf->len);
+
+ ret = ret && bcmbal_buf_write_u16(buf, (uint16_t)msg->m.type);
+ ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->m.instance);
+ ret = ret && bcmbal_buf_write_u8(buf, (uint8_t)msg->m.sender);
+
+ /* ...and then the rest of the header (15 bytes post-pack) */
+ ret = ret && bcmbal_buf_write_u8(buf, msg->version_major);
+ ret = ret && bcmbal_buf_write_u8(buf, msg->version_minor);
+ ret = ret && bcmbal_buf_write_u32(buf, msg->msg_id); /* the msg_id cannot be compressed */
+ ret = ret && bcmbal_buf_write_u16(buf, (uint16_t)msg->msg_type);
+ ret = ret && bcmbal_buf_write_u32(buf, msg->ex_id);
+ ret = ret && bcmbal_buf_write_u8(buf, msg->sender);
+
+ return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/** Unpack a BAL message header from a byte stream */
+bcmos_errno bcmbal_bal_msg_hdr_unpack(bal_comm_msg_hdr *msg, bcmbal_buf *buf)
+{
+ uint16_t m_type;
+ uint8_t m_instance;
+ uint8_t m_sender;
+ uint32_t m_size;
+
+ uint8_t version_major;
+ uint8_t version_minor;
+ uint32_t msg_id;
+ uint16_t msg_type;
+ uint32_t ex_id;
+ uint8_t sender;
+
+ bcmos_bool ret;
+
+ ret = bcmbal_buf_read_u32(buf, &m_size);
+ ret = ret && bcmbal_buf_read_u16(buf, &m_type);
+ ret = ret && bcmbal_buf_read_u8(buf, &m_instance);
+ ret = ret && bcmbal_buf_read_u8(buf, &m_sender);
+
+ ret = ret && bcmbal_buf_read_u8(buf, &version_major);
+ ret = ret && bcmbal_buf_read_u8(buf, &version_minor);
+ ret = ret && bcmbal_buf_read_u32(buf, &msg_id);
+ ret = ret && bcmbal_buf_read_u16(buf, &msg_type);
+ ret = ret && bcmbal_buf_read_u32(buf, &ex_id);
+ ret = ret && bcmbal_buf_read_u8(buf, &sender);
+
+ if (ret)
+ {
+ msg->m.type = (bcmos_msg_id)m_type;
+ msg->m.instance = (bcmos_msg_instance)m_instance;
+ msg->m.sender = (bcmos_module_id)m_sender;
+ msg->m.size = m_size;
+
+ msg->version_major = version_major;
+ msg->version_minor = version_minor;
+ msg->msg_id = msg_id;
+ msg->msg_type = msg_type;
+ msg->ex_id = ex_id;
+ msg->sender = sender;
+ }
+
+ return ret ? BCM_ERR_OK : BCM_ERR_OVERFLOW;
+}
+
+/** Peek exchange_id in the received message without unpacking */
+bcmos_errno bcmbal_bal_msg_peek_ex_id(bcmos_msg *msg, uint32_t *ex_id)
+{
+ bcmbal_buf buf;
+ if (msg->size < bcmbal_bal_msg_hdr_get_packed_length())
+ return BCM_ERR_INTERNAL;
+ bcmbal_buf_init(&buf, msg->size, msg->data);
+ bcmolt_buf_set_pos(&buf, bcmbal_bal_msg_hdr_get_ex_id_offset());
+ bcmbal_buf_read_u32(&buf, ex_id);
+ return BCM_ERR_OK;
+}
+
+
+
diff --git a/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c
new file mode 100644
index 0000000..519af97
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.c
@@ -0,0 +1,558 @@
+#include <bcmos_system.h>
+#include <bal_msg.h>
+#include "bal_obj_msg_pack_unpack.h"
+
+typedef uint32_t (*bcmbal_func_packed_len) (void *this, bcmbal_presence_mask fields_present);
+typedef bcmos_bool (*bcmbal_func_pack) (void *this, bcmbal_buf *buf, bcmbal_presence_mask fields_present);
+typedef bcmos_bool (*bcmbal_func_unpack) (void *this, bcmbal_buf *buf, void **extra_mem, bcmbal_presence_mask fields_present);
+typedef bcmos_bool (*bcmbal_func_mem_scan) (bcmbal_buf * buf, uint32_t * extra_mem, bcmbal_presence_mask fields_present);
+
+/******************************************************************************/
+typedef struct bcmbal_group_info
+{
+ bcmbal_obj_id obj_type;
+ bcmbal_mgt_group group;
+ uint16_t subgroup;
+ uint32_t size;
+ uint32_t container_size; /* sizeof() the key/data container struct (0 for key groups) */
+ uint32_t data_offset; /* offsetof() data field within container struct (0 for key groups) */
+ bcmbal_func_packed_len get_packed_length;
+ bcmbal_func_pack pack;
+ bcmbal_func_unpack unpack;
+ bcmbal_func_mem_scan mem_scan;
+} bcmbal_group_info;
+
+/******************************************************************************/
+typedef struct bcmbal_group_ids
+{
+ uint32_t subgroup_count;
+ bcmbal_obj_group_id *subgroup_ids;
+} bcmbal_group_ids;
+
+/******************************************************************************/
+typedef struct bcmbal_instance_info
+{
+ int8_t offset;
+ int8_t size;
+} bcmbal_instance_info;
+
+/******************************************************************************/
+static bcmbal_group_info group_info_access_terminal_key = { BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_access_terminal_key), 0, 0, (bcmbal_func_packed_len) bcmbal_access_terminal_key_get_packed_length, (bcmbal_func_pack) bcmbal_access_terminal_key_pack, (bcmbal_func_unpack) bcmbal_access_terminal_key_unpack, bcmbal_access_terminal_key_scan };
+static bcmbal_group_info group_info_access_terminal_cfg = { BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_access_terminal_cfg_data), sizeof(bcmbal_access_terminal_cfg), offsetof(bcmbal_access_terminal_cfg, data), (bcmbal_func_packed_len) bcmbal_access_terminal_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_access_terminal_cfg_data_pack, (bcmbal_func_unpack) bcmbal_access_terminal_cfg_data_unpack, bcmbal_access_terminal_cfg_data_scan };
+static bcmbal_group_info group_info_access_terminal_ind = { BCMBAL_OBJ_ID_ACCESS_TERMINAL, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_access_terminal_ind_data), sizeof(bcmbal_access_terminal_ind), offsetof(bcmbal_access_terminal_ind, data), (bcmbal_func_packed_len) bcmbal_access_terminal_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_access_terminal_ind_data_pack, (bcmbal_func_unpack) bcmbal_access_terminal_ind_data_unpack, bcmbal_access_terminal_ind_data_scan };
+static bcmbal_group_info group_info_flow_key = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_flow_key), 0, 0, (bcmbal_func_packed_len) bcmbal_flow_key_get_packed_length, (bcmbal_func_pack) bcmbal_flow_key_pack, (bcmbal_func_unpack) bcmbal_flow_key_unpack, bcmbal_flow_key_scan };
+static bcmbal_group_info group_info_flow_cfg = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_flow_cfg_data), sizeof(bcmbal_flow_cfg), offsetof(bcmbal_flow_cfg, data), (bcmbal_func_packed_len) bcmbal_flow_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_flow_cfg_data_pack, (bcmbal_func_unpack) bcmbal_flow_cfg_data_unpack, bcmbal_flow_cfg_data_scan };
+static bcmbal_group_info group_info_flow_stat = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_flow_stat_data), sizeof(bcmbal_flow_stat), offsetof(bcmbal_flow_stat, data), (bcmbal_func_packed_len) bcmbal_flow_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_flow_stat_data_pack, (bcmbal_func_unpack) bcmbal_flow_stat_data_unpack, bcmbal_flow_stat_data_scan };
+static bcmbal_group_info group_info_flow_ind = { BCMBAL_OBJ_ID_FLOW, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_flow_ind_data), sizeof(bcmbal_flow_ind), offsetof(bcmbal_flow_ind, data), (bcmbal_func_packed_len) bcmbal_flow_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_flow_ind_data_pack, (bcmbal_func_unpack) bcmbal_flow_ind_data_unpack, bcmbal_flow_ind_data_scan };
+static bcmbal_group_info group_info_group_key = { BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_group_key), 0, 0, (bcmbal_func_packed_len) bcmbal_group_key_get_packed_length, (bcmbal_func_pack) bcmbal_group_key_pack, (bcmbal_func_unpack) bcmbal_group_key_unpack, bcmbal_group_key_scan };
+static bcmbal_group_info group_info_group_cfg = { BCMBAL_OBJ_ID_GROUP, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_group_cfg_data), sizeof(bcmbal_group_cfg), offsetof(bcmbal_group_cfg, data), (bcmbal_func_packed_len) bcmbal_group_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_group_cfg_data_pack, (bcmbal_func_unpack) bcmbal_group_cfg_data_unpack, bcmbal_group_cfg_data_scan };
+static bcmbal_group_info group_info_interface_key = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_interface_key), 0, 0, (bcmbal_func_packed_len) bcmbal_interface_key_get_packed_length, (bcmbal_func_pack) bcmbal_interface_key_pack, (bcmbal_func_unpack) bcmbal_interface_key_unpack, bcmbal_interface_key_scan };
+static bcmbal_group_info group_info_interface_cfg = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_interface_cfg_data), sizeof(bcmbal_interface_cfg), offsetof(bcmbal_interface_cfg, data), (bcmbal_func_packed_len) bcmbal_interface_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_interface_cfg_data_pack, (bcmbal_func_unpack) bcmbal_interface_cfg_data_unpack, bcmbal_interface_cfg_data_scan };
+static bcmbal_group_info group_info_interface_stat = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_interface_stat_data), sizeof(bcmbal_interface_stat), offsetof(bcmbal_interface_stat, data), (bcmbal_func_packed_len) bcmbal_interface_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_interface_stat_data_pack, (bcmbal_func_unpack) bcmbal_interface_stat_data_unpack, bcmbal_interface_stat_data_scan };
+static bcmbal_group_info group_info_interface_ind = { BCMBAL_OBJ_ID_INTERFACE, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_interface_ind_data), sizeof(bcmbal_interface_ind), offsetof(bcmbal_interface_ind, data), (bcmbal_func_packed_len) bcmbal_interface_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_interface_ind_data_pack, (bcmbal_func_unpack) bcmbal_interface_ind_data_unpack, bcmbal_interface_ind_data_scan };
+static bcmbal_group_info group_info_packet_key = { BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_packet_key), 0, 0, (bcmbal_func_packed_len) bcmbal_packet_key_get_packed_length, (bcmbal_func_pack) bcmbal_packet_key_pack, (bcmbal_func_unpack) bcmbal_packet_key_unpack, bcmbal_packet_key_scan };
+static bcmbal_group_info group_info_packet_cfg = { BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_packet_cfg_data), sizeof(bcmbal_packet_cfg), offsetof(bcmbal_packet_cfg, data), (bcmbal_func_packed_len) bcmbal_packet_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_packet_cfg_data_pack, (bcmbal_func_unpack) bcmbal_packet_cfg_data_unpack, bcmbal_packet_cfg_data_scan };
+static bcmbal_group_info group_info_packet_ind = { BCMBAL_OBJ_ID_PACKET, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_packet_ind_data), sizeof(bcmbal_packet_ind), offsetof(bcmbal_packet_ind, data), (bcmbal_func_packed_len) bcmbal_packet_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_packet_ind_data_pack, (bcmbal_func_unpack) bcmbal_packet_ind_data_unpack, bcmbal_packet_ind_data_scan };
+static bcmbal_group_info group_info_subscriber_terminal_key = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_subscriber_terminal_key), 0, 0, (bcmbal_func_packed_len) bcmbal_subscriber_terminal_key_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_key_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_key_unpack, bcmbal_subscriber_terminal_key_scan };
+static bcmbal_group_info group_info_subscriber_terminal_cfg = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_subscriber_terminal_cfg_data), sizeof(bcmbal_subscriber_terminal_cfg), offsetof(bcmbal_subscriber_terminal_cfg, data), (bcmbal_func_packed_len) bcmbal_subscriber_terminal_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_cfg_data_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_cfg_data_unpack, bcmbal_subscriber_terminal_cfg_data_scan };
+static bcmbal_group_info group_info_subscriber_terminal_stat = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_subscriber_terminal_stat_data), sizeof(bcmbal_subscriber_terminal_stat), offsetof(bcmbal_subscriber_terminal_stat, data), (bcmbal_func_packed_len) bcmbal_subscriber_terminal_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_stat_data_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_stat_data_unpack, bcmbal_subscriber_terminal_stat_data_scan };
+static bcmbal_group_info group_info_subscriber_terminal_ind = { BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_subscriber_terminal_ind_data), sizeof(bcmbal_subscriber_terminal_ind), offsetof(bcmbal_subscriber_terminal_ind, data), (bcmbal_func_packed_len) bcmbal_subscriber_terminal_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_subscriber_terminal_ind_data_pack, (bcmbal_func_unpack) bcmbal_subscriber_terminal_ind_data_unpack, bcmbal_subscriber_terminal_ind_data_scan };
+static bcmbal_group_info group_info_tm_queue_key = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_tm_queue_key), 0, 0, (bcmbal_func_packed_len) bcmbal_tm_queue_key_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_key_pack, (bcmbal_func_unpack) bcmbal_tm_queue_key_unpack, bcmbal_tm_queue_key_scan };
+static bcmbal_group_info group_info_tm_queue_cfg = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_tm_queue_cfg_data), sizeof(bcmbal_tm_queue_cfg), offsetof(bcmbal_tm_queue_cfg, data), (bcmbal_func_packed_len) bcmbal_tm_queue_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_cfg_data_pack, (bcmbal_func_unpack) bcmbal_tm_queue_cfg_data_unpack, bcmbal_tm_queue_cfg_data_scan };
+static bcmbal_group_info group_info_tm_queue_stat = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_STAT, 0, sizeof(bcmbal_tm_queue_stat_data), sizeof(bcmbal_tm_queue_stat), offsetof(bcmbal_tm_queue_stat, data), (bcmbal_func_packed_len) bcmbal_tm_queue_stat_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_stat_data_pack, (bcmbal_func_unpack) bcmbal_tm_queue_stat_data_unpack, bcmbal_tm_queue_stat_data_scan };
+static bcmbal_group_info group_info_tm_queue_ind = { BCMBAL_OBJ_ID_TM_QUEUE, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_tm_queue_ind_data), sizeof(bcmbal_tm_queue_ind), offsetof(bcmbal_tm_queue_ind, data), (bcmbal_func_packed_len) bcmbal_tm_queue_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_queue_ind_data_pack, (bcmbal_func_unpack) bcmbal_tm_queue_ind_data_unpack, bcmbal_tm_queue_ind_data_scan };
+static bcmbal_group_info group_info_tm_sched_key = { BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_KEY, 0, sizeof(bcmbal_tm_sched_key), 0, 0, (bcmbal_func_packed_len) bcmbal_tm_sched_key_get_packed_length, (bcmbal_func_pack) bcmbal_tm_sched_key_pack, (bcmbal_func_unpack) bcmbal_tm_sched_key_unpack, bcmbal_tm_sched_key_scan };
+static bcmbal_group_info group_info_tm_sched_cfg = { BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_CFG, 0, sizeof(bcmbal_tm_sched_cfg_data), sizeof(bcmbal_tm_sched_cfg), offsetof(bcmbal_tm_sched_cfg, data), (bcmbal_func_packed_len) bcmbal_tm_sched_cfg_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_sched_cfg_data_pack, (bcmbal_func_unpack) bcmbal_tm_sched_cfg_data_unpack, bcmbal_tm_sched_cfg_data_scan };
+static bcmbal_group_info group_info_tm_sched_ind = { BCMBAL_OBJ_ID_TM_SCHED, BCMBAL_MGT_GROUP_AUTO, 0, sizeof(bcmbal_tm_sched_ind_data), sizeof(bcmbal_tm_sched_ind), offsetof(bcmbal_tm_sched_ind, data), (bcmbal_func_packed_len) bcmbal_tm_sched_ind_data_get_packed_length, (bcmbal_func_pack) bcmbal_tm_sched_ind_data_pack, (bcmbal_func_unpack) bcmbal_tm_sched_ind_data_unpack, bcmbal_tm_sched_ind_data_scan };
+static bcmbal_group_info *group_info[] = { &group_info_access_terminal_key, &group_info_access_terminal_cfg, &group_info_access_terminal_ind, &group_info_flow_key, &group_info_flow_cfg, &group_info_flow_stat, &group_info_flow_ind, &group_info_group_key, &group_info_group_cfg, &group_info_interface_key, &group_info_interface_cfg, &group_info_interface_stat, &group_info_interface_ind, &group_info_packet_key, &group_info_packet_cfg, &group_info_packet_ind, &group_info_subscriber_terminal_key, &group_info_subscriber_terminal_cfg, &group_info_subscriber_terminal_stat, &group_info_subscriber_terminal_ind, &group_info_tm_queue_key, &group_info_tm_queue_cfg, &group_info_tm_queue_stat, &group_info_tm_queue_ind, &group_info_tm_sched_key, &group_info_tm_sched_cfg, &group_info_tm_sched_ind };
+static bcmbal_obj_group_id group_ids_access_terminal_key[] = { BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_KEY };
+static bcmbal_obj_group_id group_ids_access_terminal_cfg[] = { BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_CFG };
+static bcmbal_obj_group_id group_ids_access_terminal_auto[] = { BCMBAL_OBJ_GROUP_ID_ACCESS_TERMINAL_IND };
+static bcmbal_obj_group_id group_ids_flow_key[] = { BCMBAL_OBJ_GROUP_ID_FLOW_KEY };
+static bcmbal_obj_group_id group_ids_flow_cfg[] = { BCMBAL_OBJ_GROUP_ID_FLOW_CFG };
+static bcmbal_obj_group_id group_ids_flow_stat[] = { BCMBAL_OBJ_GROUP_ID_FLOW_STAT };
+static bcmbal_obj_group_id group_ids_flow_auto[] = { BCMBAL_OBJ_GROUP_ID_FLOW_IND };
+static bcmbal_obj_group_id group_ids_group_key[] = { BCMBAL_OBJ_GROUP_ID_GROUP_KEY };
+static bcmbal_obj_group_id group_ids_group_cfg[] = { BCMBAL_OBJ_GROUP_ID_GROUP_CFG };
+static bcmbal_obj_group_id group_ids_interface_key[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_KEY };
+static bcmbal_obj_group_id group_ids_interface_cfg[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_CFG };
+static bcmbal_obj_group_id group_ids_interface_stat[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_STAT };
+static bcmbal_obj_group_id group_ids_interface_auto[] = { BCMBAL_OBJ_GROUP_ID_INTERFACE_IND };
+static bcmbal_obj_group_id group_ids_packet_key[] = { BCMBAL_OBJ_GROUP_ID_PACKET_KEY };
+static bcmbal_obj_group_id group_ids_packet_cfg[] = { BCMBAL_OBJ_GROUP_ID_PACKET_CFG };
+static bcmbal_obj_group_id group_ids_packet_auto[] = { BCMBAL_OBJ_GROUP_ID_PACKET_IND };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_key[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_KEY };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_cfg[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_CFG };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_stat[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_STAT };
+static bcmbal_obj_group_id group_ids_subscriber_terminal_auto[] = { BCMBAL_OBJ_GROUP_ID_SUBSCRIBER_TERMINAL_IND };
+static bcmbal_obj_group_id group_ids_tm_queue_key[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_KEY };
+static bcmbal_obj_group_id group_ids_tm_queue_cfg[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_CFG };
+static bcmbal_obj_group_id group_ids_tm_queue_stat[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_STAT };
+static bcmbal_obj_group_id group_ids_tm_queue_auto[] = { BCMBAL_OBJ_GROUP_ID_TM_QUEUE_IND };
+static bcmbal_obj_group_id group_ids_tm_sched_key[] = { BCMBAL_OBJ_GROUP_ID_TM_SCHED_KEY };
+static bcmbal_obj_group_id group_ids_tm_sched_cfg[] = { BCMBAL_OBJ_GROUP_ID_TM_SCHED_CFG };
+static bcmbal_obj_group_id group_ids_tm_sched_auto[] = { BCMBAL_OBJ_GROUP_ID_TM_SCHED_IND };
+static bcmbal_group_ids group_ids_obj_access_terminal[] = { { 1, group_ids_access_terminal_key }, { 1, group_ids_access_terminal_cfg }, { 0, NULL }, { 1, group_ids_access_terminal_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_flow[] = { { 1, group_ids_flow_key }, { 1, group_ids_flow_cfg }, { 1, group_ids_flow_stat }, { 1, group_ids_flow_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_group[] = { { 1, group_ids_group_key }, { 1, group_ids_group_cfg }, { 0, NULL }, { 0, NULL }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_interface[] = { { 1, group_ids_interface_key }, { 1, group_ids_interface_cfg }, { 1, group_ids_interface_stat }, { 1, group_ids_interface_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_packet[] = { { 1, group_ids_packet_key }, { 1, group_ids_packet_cfg }, { 0, NULL }, { 1, group_ids_packet_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_subscriber_terminal[] = { { 1, group_ids_subscriber_terminal_key }, { 1, group_ids_subscriber_terminal_cfg }, { 1, group_ids_subscriber_terminal_stat }, { 1, group_ids_subscriber_terminal_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_tm_queue[] = { { 1, group_ids_tm_queue_key }, { 1, group_ids_tm_queue_cfg }, { 1, group_ids_tm_queue_stat }, { 1, group_ids_tm_queue_auto }, { 0, NULL } };
+static bcmbal_group_ids group_ids_obj_tm_sched[] = { { 1, group_ids_tm_sched_key }, { 1, group_ids_tm_sched_cfg }, { 0, NULL }, { 1, group_ids_tm_sched_auto }, { 0, NULL } };
+static bcmbal_group_ids *group_ids[] = { group_ids_obj_access_terminal, group_ids_obj_flow, group_ids_obj_group, group_ids_obj_interface, group_ids_obj_packet, group_ids_obj_subscriber_terminal, group_ids_obj_tm_queue, group_ids_obj_tm_sched };
+static bcmbal_presence_mask readonly_prop_mask[] = { (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_OPER_STATUS) | (1ULL << BCMBAL_ACCESS_TERMINAL_CFG_ID_IWF_MODE), 1ULL << BCMBAL_FLOW_CFG_ID_OPER_STATUS, (1ULL << BCMBAL_GROUP_CFG_ID_FLOWS) | (1ULL << BCMBAL_GROUP_CFG_ID_OWNER), (1ULL << BCMBAL_INTERFACE_CFG_ID_OPER_STATUS) | (1ULL << BCMBAL_INTERFACE_CFG_ID_SUB_TERM_ID_LIST), 0, (((1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_OPER_STATUS) | (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID)) | (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_SVC_PORT_ID_LIST)) | (1ULL << BCMBAL_SUBSCRIBER_TERMINAL_CFG_ID_AGG_PORT_ID_LIST), (1ULL << BCMBAL_TM_QUEUE_CFG_ID_CREATION_MODE) | (1ULL << BCMBAL_TM_QUEUE_CFG_ID_REF_COUNT), ((1ULL << BCMBAL_TM_SCHED_CFG_ID_CREATION_MODE) | (1ULL << BCMBAL_TM_SCHED_CFG_ID_QUEUES)) | (1ULL << BCMBAL_TM_SCHED_CFG_ID_SUB_SCHEDS) };
+static bcmbal_instance_info instance_info[] = { { offsetof(bcmbal_access_terminal_key, access_term_id), sizeof(bcmbal_access_id) }, { offsetof(bcmbal_flow_key, flow_id), sizeof(bcmbal_flow_id) }, { offsetof(bcmbal_group_key, group_id), sizeof(bcmbal_group_id) }, { offsetof(bcmbal_interface_key, intf_id), sizeof(uint32_t) }, { offsetof(bcmbal_packet_key, reserved), sizeof(uint32_t) }, { offsetof(bcmbal_subscriber_terminal_key, sub_term_id), sizeof(bcmbal_sub_id) }, { offsetof(bcmbal_tm_queue_key, id), sizeof(bcmbal_tm_queue_id) }, { offsetof(bcmbal_tm_sched_key, id), sizeof(bcmbal_tm_sched_id) } };
+
+/** Converts a specific object type, group and subgroup into a generic group ID.
+ *
+ * \param obj The object type that corresponds to the group ID.
+ * \param group The group type that corresponds to the group ID.
+ * \param subgroup The subgroup index that corresponds to the group ID.
+ * \param group_id The generic group ID.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+static bcmos_errno _bcmbal_obj_group_id_combine(bcmbal_obj_id obj, bcmbal_mgt_group group, uint16_t subgroup, bcmbal_obj_group_id *group_id)
+{
+ if ((obj >= BCMBAL_OBJ_ID__NUM_OF) || (group >= BCMBAL_MGT_GROUP__NUM_OF) || (group_ids[obj] == NULL) || (subgroup >= group_ids[obj][group].subgroup_count))
+ {
+ return BCM_ERR_RANGE;
+ }
+
+ *group_id = group_ids[obj][group].subgroup_ids[subgroup];
+ return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+static bcmos_bool _bcmbal_get_group_info(const bcmbal_obj *msg, bcmbal_group_info **group, bcmbal_group_info **key)
+{
+ bcmbal_obj_group_id group_id;
+ bcmbal_obj_group_id key_id;
+ bcmos_errno err;
+
+ err = _bcmbal_obj_group_id_combine(msg->obj_type, msg->group, msg->subgroup, &group_id);
+ if (err != BCM_ERR_OK)
+ {
+ return BCMOS_FALSE;
+ }
+
+ err = _bcmbal_obj_group_id_combine(msg->obj_type, BCMBAL_MGT_GROUP_KEY, 0, &key_id);
+ if (err != BCM_ERR_OK)
+ {
+ return BCMOS_FALSE;
+ }
+
+ *group = group_info[group_id];
+ *key = group_info[key_id];
+ return BCMOS_TRUE;
+}
+
+/** Gets the number of bytes a message would occupy when packed.
+ *
+ * \param msg The message to scan.
+ * \return The size in bytes if > 0, or an error as defined in bcmos_errno.
+ */
+static int32_t _bcmbal_obj_msg_packed_length_get(bcmbal_obj *msg)
+{
+ uint8_t *key_ptr;
+ bcmbal_group_info *group;
+ bcmbal_group_info *key;
+ int32_t ret;
+
+ /* First, get the total length of the packed BAL msg header and the packed BAL object header */
+ ret = bcmbal_bal_msg_hdr_get_packed_length() + bcmbal_obj_msg_hdr_get_packed_length();
+
+ if (!_bcmbal_get_group_info(msg, &group, &key))
+ {
+ return (int32_t) BCM_ERR_MSG_ERROR;
+ }
+
+ key_ptr = (uint8_t *) (msg + 1);
+
+ /* Add the length of the packed key */
+ ret += key->get_packed_length(key_ptr, BCMBAL_PRESENCE_MASK_ALL);
+
+ /* Add the length of the packed object itself (for those attributes that have been specified, if any) */
+ if (bcmbal_obj_msg_should_pack_data(msg) && (group->get_packed_length != NULL))
+ {
+ uint8_t *data_ptr = (uint8_t *) ((long)msg + group->data_offset);
+ ret += group->get_packed_length(data_ptr, msg->presence_mask);
+ }
+
+ return ret;
+}
+
+/** Packs a message to a byte stream.
+ *
+ * \param msg The message to pack.
+ * \param buf The stream to pack into.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+static bcmos_errno _bcmbal_obj_msg_pack(bal_comm_msg_hdr *msg, bcmbal_buf *buf)
+{
+ uint8_t *key_ptr;
+ bcmos_errno err;
+ bcmbal_group_info *group;
+ bcmbal_group_info *key;
+ bcmbal_obj *bal_obj = (bcmbal_obj *)bcmbal_payload_ptr_get(msg);
+
+ if (!_bcmbal_get_group_info(bal_obj, &group, &key))
+ {
+ return BCM_ERR_MSG_ERROR;
+ }
+
+ err = bcmbal_bal_msg_hdr_pack(msg, buf);
+ if (err != BCM_ERR_OK)
+ {
+ return err;
+ }
+
+ err = bcmbal_obj_msg_hdr_pack(bal_obj, buf);
+ if (err != BCM_ERR_OK)
+ {
+ return err;
+ }
+
+ key_ptr = (uint8_t *) (bal_obj + 1);
+ if (!key->pack(key_ptr, buf, BCMBAL_PRESENCE_MASK_ALL))
+ {
+ return BCM_ERR_OVERFLOW;
+ }
+
+ if (bcmbal_obj_msg_should_pack_data(bal_obj) && (group->pack != NULL))
+ {
+ uint8_t *data_ptr = (uint8_t *) ((long)bal_obj + group->data_offset);
+ if (!group->pack(data_ptr, buf, bal_obj->presence_mask))
+ {
+ return BCM_ERR_OVERFLOW;
+ }
+ }
+
+ return err;
+}
+
+/* scan the input buffer to determine how much memory will be required to unpack variable-sized lists */
+static bcmos_errno bcmbal_obj_msg_list_mem_scan(bcmbal_buf *buf, const bcmbal_obj *hdr, const bcmbal_group_info *group, const bcmbal_group_info *key, uint32_t *size)
+{
+ uint32_t pos_before_scan = bcmbal_buf_get_used(buf);
+
+ if (!key->mem_scan(buf, size, BCMBAL_PRESENCE_MASK_ALL))
+ {
+ return BCM_ERR_OVERFLOW;
+ }
+
+ if (bcmbal_obj_msg_should_pack_data(hdr) && (group->mem_scan != NULL) && !group->mem_scan(buf, size, hdr->presence_mask))
+ {
+ return BCM_ERR_OVERFLOW;
+ }
+
+ if (!bcmbal_buf_rewind(buf, bcmbal_buf_get_used(buf) - pos_before_scan))
+ {
+ return BCM_ERR_OVERFLOW;
+ }
+
+ return BCM_ERR_OK;
+}
+
+/** Unpacks a message from a byte stream.
+ *
+ * This unpacks the message from the packed form into the struct following the "unpacked" pointer. There are several
+ * special cases:
+ *
+ * if *unpacked == NULL:
+ * *unpacked will be allocated dynamically via bcmos_calloc, in a contiguous block of memory with the struct
+ * itself followed by the memory required for all variable-sized lists.
+ *
+ * if (*unpacked)->list_buf != NULL:
+ * When a variable-length list is encountered in the input stream, and the array field we're unpacking into is NULL,
+ * memory will be allocated starting from (*unpacked)->list_buf. If multiple such lists exist, they will share this
+ * buffer. If the (*unpacked)->list_buf_size is not large enough, this will return BCM_ERR_INSUFFICIENT_LIST_MEM.
+ *
+ * \param buf The stream to unpack from.
+ * \param unpacked A pointer to the resulting unpacked BAL message starting at the bal header.
+ * \return The number of bytes unpacked if > 0, or an error as defined in bcmos_errno.
+ */
+static int32_t _bcmbal_obj_msg_unpack(bcmbal_buf *buf, bal_comm_msg_hdr **unpacked)
+{
+ bcmbal_obj bal_obj_hdr;
+ bal_comm_msg_hdr *bal_msg_hdr = &bal_obj_hdr.comm_hdr;
+ bcmos_errno err;
+ bcmbal_group_info *group;
+ bcmbal_group_info *key;
+ bcmos_bool did_malloc = BCMOS_FALSE;
+ uint8_t *key_ptr;
+ void *list_mem = NULL;
+ void **list_mem_ptr = NULL;
+ uint32_t size = 0;
+ bcmbal_obj *unpacked_bal_obj;
+
+ /* Preserve header fields that are not packed */
+ if (*unpacked != NULL)
+ memcpy(&bal_obj_hdr, bcmbal_payload_ptr_get(*unpacked), sizeof(bal_obj_hdr));
+ else
+ memset(&bal_obj_hdr, 0, sizeof(bal_obj_hdr));
+
+ err = bcmbal_bal_msg_hdr_unpack(bal_msg_hdr, buf);
+ if (err != BCM_ERR_OK)
+ {
+ return err;
+ }
+
+ err = bcmbal_obj_msg_hdr_unpack(&bal_obj_hdr, buf);
+ if (err != BCM_ERR_OK)
+ {
+ return err;
+ }
+
+ if (!_bcmbal_get_group_info(&bal_obj_hdr, &group, &key))
+ {
+ return BCM_ERR_MSG_ERROR;
+ }
+
+ /* If the caller did not allocate a space to unpack into, then alloc one */
+ if (*unpacked == NULL)
+ {
+ size = group->container_size == 0 ? sizeof(bcmbal_obj) + key->size : group->container_size;
+
+ err = bcmbal_obj_msg_list_mem_scan(buf, &bal_obj_hdr, group, key, &size);
+ if (err != BCM_ERR_OK)
+ {
+ return err;
+ }
+
+ /* allocate a bal msg header, and a BAL object with data length of "size" */
+ unpacked_bal_obj = bcmbal_msg_calloc(size);
+ if (unpacked_bal_obj == NULL)
+ {
+ return BCM_ERR_NOMEM;
+ }
+
+ *unpacked = bcmbal_bal_hdr_get(unpacked_bal_obj);
+
+ list_mem = (uint8_t *)unpacked_bal_obj + group->container_size;
+ list_mem_ptr = &list_mem;
+ did_malloc = BCMOS_TRUE;
+ }
+ else
+ {
+ unpacked_bal_obj = bcmbal_payload_ptr_get(*unpacked);
+
+ if (unpacked_bal_obj->list_buf != NULL)
+ {
+ err = bcmbal_obj_msg_list_mem_scan(buf, &bal_obj_hdr, group, key, &size);
+ if (err != BCM_ERR_OK)
+ {
+ return err;
+ }
+
+ if (size > unpacked_bal_obj->list_buf_size)
+ {
+ return BCM_ERR_INSUFFICIENT_LIST_MEM;
+ }
+
+ list_mem = unpacked_bal_obj->list_buf;
+ list_mem_ptr = &list_mem;
+ }
+
+ size += group->container_size == 0 ? sizeof(bcmbal_obj) + key->size : group->container_size;
+ }
+
+ /* copy the bal message header into the unpack buffer */
+ bal_msg_hdr->m.size = size - sizeof(bcmos_msg);
+
+ /* copy the bal object header into the unpack buffer */
+ *unpacked_bal_obj = bal_obj_hdr;
+
+ key_ptr = (uint8_t *) (unpacked_bal_obj + 1);
+ if (!key->unpack(key_ptr, buf, list_mem_ptr, BCMBAL_PRESENCE_MASK_ALL))
+ {
+ if (did_malloc)
+ {
+ bcmbal_msg_free(unpacked_bal_obj);
+ *unpacked = NULL;
+ }
+
+ return BCM_ERR_OVERFLOW;
+ }
+
+ if (bcmbal_obj_msg_should_pack_data(&bal_obj_hdr))
+ {
+ uint8_t *data_ptr = (uint8_t *)unpacked_bal_obj + group->data_offset;
+ if ((group->unpack != NULL) && !group->unpack(data_ptr, buf, list_mem_ptr, unpacked_bal_obj->presence_mask))
+ {
+ if (did_malloc)
+ {
+ bcmbal_msg_free(unpacked_bal_obj);
+ *unpacked = NULL;
+ }
+
+ return BCM_ERR_OVERFLOW;
+ }
+ }
+
+ return size;
+}
+
+bcmos_errno bcmbal_obj_msg_pack(bal_comm_msg_hdr *unpacked_bal_msg, /* unpacked msg */ bcmos_msg **packed_msg) /* packed message */
+{
+ bcmbal_buf buf;
+ bcmos_errno ret;
+ bcmbal_obj *unpacked_obj;
+ int32_t packed_payload_len;
+ uint8_t *packed_payload;
+ bcmos_msg *os_msg;
+
+ *packed_msg = NULL; /* Initialization */
+
+ /* Recover a pointer to the UNPACKED bal object */
+ unpacked_obj = (bcmbal_obj *)bcmbal_payload_ptr_get(unpacked_bal_msg);
+
+ /* Calculate packed length */
+ packed_payload_len = _bcmbal_obj_msg_packed_length_get(unpacked_obj);
+ if (packed_payload_len < 0) return (bcmos_errno) packed_payload_len;
+
+ os_msg = (bcmos_msg *)bcmos_alloc(packed_payload_len + sizeof(bcmos_msg));
+
+ if (NULL == os_msg) return BCM_ERR_NORES;
+
+ memset(os_msg, 0, sizeof(bcmos_msg));
+ packed_payload = (uint8_t *) (os_msg + 1);
+ bcmbal_buf_init(&buf, packed_payload_len, packed_payload);
+ if (BCM_ERR_OK != (ret = _bcmbal_obj_msg_pack(unpacked_bal_msg, &buf)))
+ {
+ bcmos_free(os_msg);
+ return ret;
+ }
+
+ os_msg->data = packed_payload;
+ os_msg->size = packed_payload_len;
+ os_msg->type = unpacked_bal_msg->m.type;
+ os_msg->instance = unpacked_bal_msg->m.instance;
+ os_msg->sender = unpacked_bal_msg->m.sender;
+ *packed_msg = os_msg;
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcmbal_obj_msg_unpack(bcmos_msg *packed_msg, /* packed message */ bal_comm_msg_hdr **unpacked_bal_msg) /* the unpacked bal msg */
+{
+ bcmbal_buf buf;
+ int32_t unpacked_len;
+ bal_comm_msg_hdr *bal_msg_hdr = *unpacked_bal_msg;
+ uint8_t *packed_payload = packed_msg->data;
+ uint32_t packed_payload_len = packed_msg->size;
+
+ bcmbal_buf_init(&buf, packed_payload_len, packed_payload);
+
+ unpacked_len = _bcmbal_obj_msg_unpack(&buf, &bal_msg_hdr);
+
+ if (unpacked_len < 0)
+ {
+ return (bcmos_errno) unpacked_len;
+ }
+
+ if (((bcmbal_obj *) (bcmbal_payload_ptr_get(bal_msg_hdr)))->version != BCMBAL_OBJ_VERSION)
+ {
+ bcmos_printf("Illegal BAL object version detected. Found: %d, Should be:%d\n", ((bcmbal_obj *) (bcmbal_payload_ptr_get(bal_msg_hdr)))->version, BCMBAL_OBJ_VERSION);
+
+ return BCM_ERR_PARSE;
+ }
+
+ *unpacked_bal_msg = bal_msg_hdr;
+
+ /* NOTE: Do NOT Free the passed in original received message! */
+ return BCM_ERR_OK;
+}
+
+bcmos_errno _bcmbal_obj_group_id_split(bcmbal_obj_group_id group_id, bcmbal_obj_id *obj, bcmbal_mgt_group *group, uint16_t *subgroup)
+{
+ if ((group_id >= BCMBAL_OBJ_GROUP_ID__NUM_OF) || (group_info[group_id] == NULL))
+ {
+ return BCM_ERR_RANGE;
+ }
+
+ *obj = group_info[group_id]->obj_type;
+ *group = group_info[group_id]->group;
+ *subgroup = group_info[group_id]->subgroup;
+ return BCM_ERR_OK;
+}
+
+/******************************************************************************/
+uint8_t bcmbal_obj_msg_instance(const bcmbal_obj *msg)
+{
+ const void *val_ptr;
+
+ if (msg->obj_type >= BCMBAL_OBJ_ID__NUM_OF)
+ {
+ return 0;
+ }
+
+ if (instance_info[msg->obj_type].offset < 0)
+ {
+ return 0;
+ }
+
+ val_ptr = ((const uint8_t *)(msg + 1)) + instance_info[msg->obj_type].offset;
+
+ /** This is probably not the smartest way to do this... TODO: revisit */
+ switch (instance_info[msg->obj_type].size)
+ {
+ case 1:
+ return *((const uint8_t *)val_ptr);
+ case 2:
+ return (uint8_t) (*((const uint16_t *)val_ptr));
+ case 4:
+ return (uint8_t) (*((const uint32_t *)val_ptr));
+ case 8:
+ return (uint8_t) (*((const uint64_t *)val_ptr));
+ default:
+ return 0;
+ }
+}
+
+/******************************************************************************/
+bcmos_errno bcmbal_obj_msg_clone(bal_comm_msg_hdr **dest, bal_comm_msg_hdr *src)
+{
+ bcmos_errno err;
+ int32_t packed_obj_msg_len;
+ uint8_t *mem;
+ bcmbal_buf buf;
+
+ packed_obj_msg_len = _bcmbal_obj_msg_packed_length_get(bcmbal_payload_ptr_get(src));
+ if (packed_obj_msg_len < 0)
+ {
+ return (bcmos_errno) packed_obj_msg_len;
+ }
+
+ /* Allocate a BAL msg (this includes the BAL msg hdr PLUS the BAL object) */
+ mem = bcmos_calloc((uint32_t) packed_obj_msg_len);
+ if (mem == NULL)
+ {
+ return BCM_ERR_NOMEM;
+ }
+
+ bcmbal_buf_init(&buf, (uint32_t) packed_obj_msg_len, mem);
+ err = _bcmbal_obj_msg_pack(src, &buf);
+ if (err != BCM_ERR_OK)
+ {
+ bcmos_free(mem);
+ return err;
+ }
+
+ buf.curr = buf.start;
+ err = _bcmbal_obj_msg_unpack(&buf, dest);
+ bcmos_free(mem);
+ return err;
+}
+
+/******************************************************************************/
+bcmos_errno bcmbal_get_prop_readonly_mask(bcmbal_obj_id obj, bcmbal_presence_mask *mask)
+{
+ if (obj >= BCMBAL_OBJ_ID__NUM_OF)
+ {
+ return BCM_ERR_RANGE;
+ }
+
+ *mask = readonly_prop_mask[obj];
+ return BCM_ERR_OK;
+}
diff --git a/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h
new file mode 100644
index 0000000..1837a99
--- /dev/null
+++ b/bal_release/src/lib/libobjmsg/bal_obj_msg_pack_unpack.h
@@ -0,0 +1,51 @@
+#ifndef BAL_OBJ_MSG_PACK_UNPACK_H_
+#define BAL_OBJ_MSG_PACK_UNPACK_H_
+
+#include "bcmos_system.h"
+#include "bcmos_errno.h"
+#include "bal_model_types.h"
+#include "bal_model_funcs.h"
+
+
+bcmos_errno bcmbal_obj_msg_pack(bal_comm_msg_hdr *unpacked_bal_msg,/* unpacked msg */
+ bcmos_msg **packed_msg); /* packed message */
+
+bcmos_errno bcmbal_obj_msg_unpack(bcmos_msg *packed_msg, /* packed message */
+ bal_comm_msg_hdr **unpacked_bal_msg); /* the unpacked bal msg */
+
+/** Returns the instance number of a given message, as determined by the object key.
+ *
+ * \param msg The message to check.
+ * \return The instance number of the message.
+ */
+uint8_t bcmbal_obj_msg_instance(const bcmbal_obj *msg);
+
+/** Gets a mask of all readonly properties for an object's cfg group.
+ *
+ * \param obj The objecct to check.
+ * \param mask A mask of bits set to 1 per read-only property.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmbal_get_prop_readonly_mask(bcmbal_obj_id obj, bcmbal_presence_mask *mask);
+
+/** Clones a message by packing it to a buffer then unpacking it into the destination message.
+ * This uses _bcmbal_obj_msg_unpack, so if *dest is NULL, memory will by allocated dynamically using bcmos_calloc.
+ *
+ * \param dest A pointer to the location in memory that will hold the cloned message.
+ * \param src The message that should be copied.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno bcmbal_obj_msg_clone(bal_comm_msg_hdr **dest, bal_comm_msg_hdr *src);
+
+/** Converts a generic group ID into a specific object type, group and subgroup.
+ *
+ * \param group_id The generic group ID.
+ * \param obj The object type that corresponds to the group ID.
+ * \param group The group type that corresponds to the group ID.
+ * \param subgroup The subgroup index that corresponds to the group ID.
+ * \return An error code or BCM_ERR_OK for success.
+ */
+bcmos_errno _bcmbal_obj_group_id_split(bcmbal_obj_group_id group_id, bcmbal_obj_id *obj, bcmbal_mgt_group *group, uint16_t *subgroup);
+
+
+#endif /* BAL_OBJ_MSG_PACK_UNPACK_H_ */