/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates

This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms.  Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.

********************************************************************************
Marvell Commercial License Option

If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.

********************************************************************************
Marvell GPL License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED.  The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    *   Redistributions of source code must retain the above copyright notice,
        this list of conditions and the following disclaimer.

    *   Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

    *   Neither the name of Marvell nor the names of its contributors may be
        used to endorse or promote products derived from this software without
        specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

******************************************************************************/
#ifdef CONFIG_MV_TPM_SYSFS_HELP

#include "tpm_common.h"
#include "tpm_header.h"
#include "tpm_sysfs_help.h"



/**********************************************************************/
/* ===================================================================*/
/*             TPM SYSFS CFG HELP FUNCTION                            */
/* ================================================================== */


/*******************************************************************************
**
**  sfs_tpm_cfg_index
**
**  DESCRIPTION: The function print cfg help
**
**  PARAMETERS:  char* buf
**
**  OUTPUTS:     char* buf
**
**  RETURNS:     message length
**
*******************************************************************************/
int sfs_tpm_cfg_index(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "==================================================================================================\n");
    off += sprintf(buf+off, "cat help_tpm_cfg_index                        - show this help\n");
    off += sprintf(buf+off, "cat help_frwd_rule_cfg                        - show frwd rule help\n");
    off += sprintf(buf+off, "cat help_igmp_cfg                             - show IGMP configuration help\n");
    off += sprintf(buf+off, "cat help_ipv4_key_cfg                         - show IPV4 key ACL help\n");
    off += sprintf(buf+off, "cat help_ipv4_rule_add                        - show add IPV4 rule help\n");

    off += sprintf(buf+off, "cat help_ipv6_dip_key_cfg                     - show IPV6 DIP key ACL help\n");
    off += sprintf(buf+off, "cat help_ipv6_ctc_cm_key_cfg                  - show IPV6 CTC key ACL help\n");
    off += sprintf(buf+off, "cat help_ipv6_dip_rule_add                    - show add IPV6 DIP rule help\n");
    off += sprintf(buf+off, "cat help_ipv6_l4_ports_rule_add               - show add IPV6 L4 ports rule help\n");
    off += sprintf(buf+off, "cat help_ipv6_nh_rule_add                     - show add IPV6 NH rule help\n");
    off += sprintf(buf+off, "cat help_ipv6_gen_key_cfg                     - show IPV6 key ACL help\n");
    off += sprintf(buf+off, "cat help_ipv6_gen_rule_add                    - show add IPV6 rule help\n");

    off += sprintf(buf+off, "cat help_ctc_cm_rule_add                      - show add CTC CnM rule help\n");

    off += sprintf(buf+off, "cat help_key_rule_delete                      - show key delete from DB table (mod/frwd/vlan/l2/l3/ipv4) help\n");
    off += sprintf(buf+off, "cat help_l2_key_cfg                           - show L2 key ACL help\n");
    off += sprintf(buf+off, "cat help_l2_rule_add                          - show add L2 rule help\n");
    off += sprintf(buf+off, "cat help_l3_key_cfg                           - show L3 key ACL help\n");
    off += sprintf(buf+off, "cat help_l3_rule_add                          - show add L3 rule help\n");
    off += sprintf(buf+off, "cat help_mc_ipvx_stream_add                   - show add multicast IPV4 stream help\n");
    off += sprintf(buf+off, "cat help_mib_reset                            - show MIB reset help\n");
    off += sprintf(buf+off, "cat help_set_active_wan                       - show set active wan help\n");
    off += sprintf(buf+off, "cat help_mod_rule_cfg                         - show mod rule help\n");
    off += sprintf(buf+off, "cat help_no_mc_stream_add                     - show delete multicast stream help\n");
    off += sprintf(buf+off, "cat help_no_oam_omci_channel                  - show delete OAM/OMCI channel help\n");
    off += sprintf(buf+off, "cat help_no_rule_add                          - show delete L2/L3/IPV4/IPV6_xxx/DSCP IPV4/DSCP IPV6/CTC CnM rule help\n");
    off += sprintf(buf+off, "cat help_oam_omci_channel                     - show OAM/OMCI channel configuration help\n");
    off += sprintf(buf+off, "cat help_pkt_mod_add                          - show packet modification add help\n");
    off += sprintf(buf+off, "cat help_pkt_mod_get_del_purge                - show packet modification display, delete. purge help\n");
    off += sprintf(buf+off, "cat help_rate_limit                           - show queue rate limit/scheduling, entity rate limit help\n");
    off += sprintf(buf+off, "cat help_rule_table_display                   - show rule table display help\n");
    off += sprintf(buf+off, "cat help_vlan_rule_cfg                        - show vlan rule help\n");
    off += sprintf(buf+off, "cat help_delete_entry_rule_table              - show delete rule entry help\n");
    off += sprintf(buf+off, "cat help_tpm_self_check                       - show TPM check help\n");
    off += sprintf(buf+off, "cat help_mac_learn_rule_add                   - show add MAC learn rule help\n");
    off += sprintf(buf+off, "cat help_mac_learn_def_act_set                - show set action of mac learn default rule help\n");

    off += sprintf(buf+off, "==================================================================================================\n");
    return(off);
}

/*******************************************************************************
**
**  sfs_help_frwd_rule_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_frwd_rule_cfg(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [rule_name] [port_bitmap] [queue] [gem_port]  > frwd_rule_set    - set a forwarding rule\n");
	off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
	off += sprintf(buf+off, "\tport_bitmap         (hex) see below\n");
	off += sprintf(buf+off, "\t\tTPM_TRG_PORT_WAN           %#.5X     TPM_TRG_TCONT_0      %#.5X\n",TPM_TRG_PORT_WAN, TPM_TRG_TCONT_0);
	off += sprintf(buf+off, "\t\tTPM_TRG_TCONT_1            %#.5X     TPM_TRG_TCONT_2      %#.5X\n",TPM_TRG_TCONT_1, TPM_TRG_TCONT_2);
	off += sprintf(buf+off, "\t\tTPM_TRG_TCONT_3            %#.5X     TPM_TRG_TCONT_4      %#.5X\n",TPM_TRG_TCONT_3, TPM_TRG_TCONT_4);
	off += sprintf(buf+off, "\t\tTPM_TRG_TCONT_5            %#.5X     TPM_TRG_TCONT_6      %#.5X\n",TPM_TRG_TCONT_5, TPM_TRG_TCONT_6);
	off += sprintf(buf+off, "\t\tTPM_TRG_TCONT_7            %#.5X     TPM_TRG_LLID_0       %#.5X\n",TPM_TRG_TCONT_7, TPM_TRG_LLID_0);
	off += sprintf(buf+off, "\t\tTPM_TRG_LLID_1             %#.5X     TPM_TRG_LLID_2       %#.5X\n",TPM_TRG_LLID_1, TPM_TRG_LLID_2);
	off += sprintf(buf+off, "\t\tTPM_TRG_LLID_3             %#.5X     TPM_TRG_LLID_4       %#.5X\n",TPM_TRG_LLID_3, TPM_TRG_LLID_4);
	off += sprintf(buf+off, "\t\tTPM_TRG_LLID_5             %#.5X     TPM_TRG_LLID_6       %#.5X\n",TPM_TRG_LLID_5, TPM_TRG_LLID_6);
	off += sprintf(buf+off, "\t\tTPM_TRG_LLID_7             %#.5X     TPM_TRG_UNI_0        %#.5X\n",TPM_TRG_LLID_7, TPM_TRG_UNI_0);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_1              %#.5X     TPM_TRG_UNI_2        %#.5X\n",TPM_TRG_UNI_1, TPM_TRG_UNI_2);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_3              %#.5X     TPM_TRG_UNI_4        %#.5X\n",TPM_TRG_UNI_3, TPM_TRG_UNI_4);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_5              %#.5X     TPM_TRG_UNI_6        %#.5X\n",TPM_TRG_UNI_5, TPM_TRG_UNI_6);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_7              %#.5X     TPM_TRG_UNI_VIRT     %#.5X\n",TPM_TRG_UNI_7, TPM_TRG_UNI_VIRT);
	off += sprintf(buf+off, "\t\tTPM_TRG_PORT_CPU           %#.5X     TPM_TRG_PORT_UNI_ANY %#.5X\n",TPM_TRG_PORT_CPU, TPM_TRG_PORT_UNI_ANY);
	off += sprintf(buf+off, "\t\tTPM_TRG_PORT_UNI_CPU_LOOP  %#.5X     TPM_TRG_LOAD_BAL     %#.5X\n",TPM_TRG_PORT_UNI_CPU_LOOP, TPM_TRG_LOAD_BAL);
	off += sprintf(buf+off, "\tqueue               (dec)Queue number\n");
	off += sprintf(buf+off, "\tgem_port            (dec)GEM port\n");

	return(off);
}

/*******************************************************************************
**
**  sfs_help_vlan_rule_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_vlan_rule_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [rule_name] [tpid] [tpid_mask] [vid] [vid_mask] [cfi] [cfi_mask] [pbit] [pbit_mask] > vlan_rule_set        - set a VLAN rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\ttpid                (hex)TPID VLAN Ethertype\n");
    off += sprintf(buf+off, "\ttpid_mask            (hex)TPID mask\n");
    off += sprintf(buf+off, "\tvid                 (dec)VID\n");
    off += sprintf(buf+off, "\tvid_mask            (hex)VID mask\n");
    off += sprintf(buf+off, "\tcfi                 (dec)CFI\n");
    off += sprintf(buf+off, "\tcfi_mask            (hex)CFI mask\n");
    off += sprintf(buf+off, "\tpbit                (dec)P-bits\n");
    off += sprintf(buf+off, "\tpbit_mask           (hex)P-bits mask\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_mod_rule_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_mod_rule_cfg(char* buf)
{
    int off = 0;
#if 0
    off += sprintf(buf+off, "echo [rule_name] [proto]                                    > mod_proto_rule_set   - set protocol part of mod rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tprotocol_type       (hex)Protocol\n");
#endif
    off += sprintf(buf+off, "echo [rule_name] [mh2b]                                     > mod_mh_rule_set   - set protocol part of mod rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\t                     'dbg_entry' is reserved for PMT debugging\n");
    off += sprintf(buf+off, "\tmh2b                (hex)2 Bytes Marvell Header\n");

    off += sprintf(buf+off, "\necho [rule_name]   [operation] [vlan_rule_1] [vlan_rule_2] > mod_vlan_rule_set    - set VLAN part of mod rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tvlan_rule_1         (str)VLAN rule (Use vlan_empty for absent rule)\n");
    off += sprintf(buf+off, "\tvlan_rule_2         (str)VLAN rule (Use vlan_empty for absent rule)\n");
    off += sprintf(buf+off, "\toperation           (str)VLAN operation\n");
    off += sprintf(buf+off, "\t\tnone      ext_tag_mod  ext_tag_del  ext_tag_ins  ext_tag_mod_ins  ins_2tag\n");
    off += sprintf(buf+off, "\t\tmod_2tag  swap_tags    del_2tags    int_tag_mod  split_mod_pbit   ext_tag_del_int_mod\n");
#if 0
    off += sprintf(buf+off, "\necho [rule_name] [dscp] [dscpmask]                         > mod_dscp_rule_set      - set dscp part of mod rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tdscp                (dec)DSCP value\n");
    off += sprintf(buf+off, "\tdscp_mask           (hex)DSCP mask\n");
#endif
    off += sprintf(buf+off, "\necho [rule_name] [session] [protocol_type]                 > mod_pppoe_rule_set     - set PPPoE part of mod rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tsession             (dec)Session number\n");
    off += sprintf(buf+off, "\tprotocol_type       (hex)Protocol type\n");

    off += sprintf(buf+off, "\necho [rule_name] [src_port] [dst_port]                     > mod_ipv4_port_rule_set - set IPV4 port part of mod rule\n");
    off += sprintf(buf+off, "echo [rule_name] [src_port] [dst_port]                       > mod_ipv6_port_rule_set - set IPV6 port part of mod rule\n");
    off += sprintf(buf+off, "\trule_name           (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tsrc_port            (dec)Source port\n");
    off += sprintf(buf+off, "\tdst_port            (dec)Destination port\n");

    off += sprintf(buf+off, "\necho [rule_name] [srcip] [srcip_mask] [dstip] [dstip_mask] > mod_ipv6_addr_rule_set - set IPV6 address part of mod rule\n");
    off += sprintf(buf+off, "echo [rule_name] [srcip] [srcip_mask] [dstip] [dstip_mask] > mod_ipv4_addr_rule_set - set IPV4 address part of mod rule\n");
    off += sprintf(buf+off, "echo [rule_name] [SA] [SA_mask] [DA] [DA_mask]             > mod_mac_addr_rule_set  - set MAC address part of mod rule\n");
    off += sprintf(buf+off, "\trule_name            (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tMAC  address/mask    aa:bb:cc:dd:ee:ff  where each part is hexadecimal in range 0..FF\n");
    off += sprintf(buf+off, "\tIPV4 address/mask    w.x.y.z  where each part is decimal value in range 0..255\n");
    off += sprintf(buf+off, "\tIPV6 address/mask    aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh  where each part is hexadecimal in range 0..FFFF\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_l2_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_l2_key_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [rule_name] [ether_type]                     > l2_key_ethertype_rule_set  - set ethertype part of L2 ACL key\n");
    off += sprintf(buf+off, "\trule_name         (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tether_type        (hex)Ethernet type\n");

    off += sprintf(buf+off, "\necho [rule_name] [gem_port]                     > l2_key_gemport_rule_set    - set gemport part of L2 ACL key\n");
    off += sprintf(buf+off, "\trule_name         (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tgem_port          (dec)Ethernet type\n");

    off += sprintf(buf+off, "\necho [rule_name] [SA] [SA_mask] [DA] [DA_mask]  > l2_key_mac_addr_rule_set   - set MAC address part of L2 ACL rule\n");
    off += sprintf(buf+off, "\trule_name         (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tMAC address       aa:bb:cc:dd:ee:ff  where each part is hexadecimal in range 0..FF\n");

    off += sprintf(buf+off, "\necho [rule_name] [vlan_rule_1] [vlan_rule_2]    > l2_key_vlan_rule_set       - set VLAN part of L2 ACL rule\n");
    off += sprintf(buf+off, "\trule_name         (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tvlan_rule_1       (str)VLAN rule name (Use vlan_empty for absent rule)\n");
    off += sprintf(buf+off, "\tvlan_rule_2       (str)VLAN rule name (Use vlan_empty for absent rule)\n");

    off += sprintf(buf+off, "\necho [rule_name] [session] [protocol_type]      > l2_key_pppoe_rule_set      - set PPPoE part of L2 ACL rule\n");
    off += sprintf(buf+off, "\trule_name         (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tsession           (dec)Session number\n");
    off += sprintf(buf+off, "\tprotocol_type     (hex)Protocol type\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_l3_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_l3_key_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [rule_name] [ether_type]              > l3_key_ethertype_rule_set  - set ethertype part of L3 ACL key\n");
    off += sprintf(buf+off, "\trule_name       (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tether_type      (hex)Ethernet type\n");

    off += sprintf(buf+off, "echo [rule name] [session] [protocol_type] > l3_key_pppoe_rule_set      - set PPPoE part of L3 ACL rule\n");
    off += sprintf(buf+off, "\trule_name       (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tsession         (dec)Session number\n");
    off += sprintf(buf+off, "\tprotocol_type   (hex)Protocol type\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv4_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv4_key_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [rule_name] [proto]                           > ipv4_key_proto_rule_set - set protocol part of IPV4 ACL rule\n");
    off += sprintf(buf+off, "\trule_name        (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tproto            (dec)Protocol 0-255\n");

    off += sprintf(buf+off, "\necho [rule_name] [dscp] [dscpmask]               > ipv4_key_dscp_rule_set  - set dscp part of IPV4 ACL rule\n");
    off += sprintf(buf+off, "\trule_name      (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tdscp            (dec)DSCP value 0-63\n");
    off += sprintf(buf+off, "\tdscp_mask       (hex)DSCP mask  0x0-0xFF\n");

    off += sprintf(buf+off, "\necho [rule_name] [src_port] [dst_port]           > ipv4_key_port_rule_set  - set IPV4 port part of IPV4 ACL rule\n");
    off += sprintf(buf+off, "\trule_name       (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tsrc_port        (dec)Source port\n");
    off += sprintf(buf+off, "\tdst_port        (dec)Destination port\n");

    off += sprintf(buf+off, "\necho [rule_name] [srcip] [srcip_mask] [dstip] [dstip_mask] > ipv4_key_addr_rule_set  - set IPV4 address part of IPV4 ACL rule\n");
    off += sprintf(buf+off, "\trule_name       (max 16 chars)Rule name\n");
    off += sprintf(buf+off, "\tIPV4 address     w.x.y.z  where each part is decimal value in range 0..255\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_mtu_cfg - see
**
*******************************************************************************/
int sfs_help_mtu_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [enable]                                    > enable_mtu  - enable mtu checking\n");
    off += sprintf(buf+off, "\tenable                      (dec)0 disable, 1 enable\n");
    off += sprintf(buf+off, "echo [ipv4_or_ipv6] [direction] [mtu_value]      > set_mtu  - set mtu\n");
    off += sprintf(buf+off, "\tipv4_or_ipv6                (dec)0 for IPv4, 1 for IPv6\n");
    off += sprintf(buf+off, "\tdirection                   (dec)0 for DS, 1 for US\n");
    off += sprintf(buf+off, "\tmtu_value                   (dec)mtu value\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [ipv4_or_ipv6] [direction] [pppoe_mtu_value] > set_pppoe_mtu  - set pppoe mtu\n");
    off += sprintf(buf+off, "\tipv4_or_ipv6                (dec)0 for IPv4, 1 for IPv6\n");
    off += sprintf(buf+off, "\tdirection                   (dec)0 for DS, 1 for US\n");
    off += sprintf(buf+off, "\tpppoe_mtu_value             (dec)pppoe mtu value\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_gen_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_gen_key_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [key_name] [DSCP] [DSCP Mask] > ipv6_gen_key_dscp_rule_set  - set dscp key\n");
    off += sprintf(buf+off, "\tkey_name           (max 16 chars)Key name\n");
    off += sprintf(buf+off, "\tDSCP               (dec)DSCP\n");
    off += sprintf(buf+off, "\tDSCP Mask          (hex)DSCP Mask\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [Key_name] [srcip] [srcip_mask] > ipv6_gen_key_sip_rule_set      - set sip key\n");
    off += sprintf(buf+off, "\tKey_name           (max 16 chars)Key name\n");
    off += sprintf(buf+off, "\tIPV6 address/mask  aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh  where each part is hexadecimal in range 0..FFFF\n");

    return(off);
}
/*******************************************************************************
**
**  sfs_help_ipv6_dip_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_dip_key_cfg(char* buf)
{
    int off = 0;
    off += sprintf(buf+off, "echo [Key_name] [dip] [dip_mask] > ipv6_dip_key_rule_set      - set dip key\n");
    off += sprintf(buf+off, "\tKey_name                (max 16 chars)Key name\n");
    off += sprintf(buf+off, "\tIPV6 dip address        aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh  where each part is hexadecimal in range 0..FFFF\n");
    off += sprintf(buf+off, "\tIPV6 dip address mask   aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh  where each part is hexadecimal in range 0..FFFF\n");

    return(off);
}
/*******************************************************************************
**
**  sfs_help_ipv6_ctc_cm_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_ctc_cm_key_cfg(char* buf)
{
    int off = 0;
    off += sprintf(buf+off, "echo [ipv6_ctc_Key_name] [ipv6_gen_Key_name] [ipv6_dip_Key_name] [ipv6_l4_Key_name] "
    "[ipv6_nh] [ipv6_hoplimit] > ipv6_ctc_cm_key_rule_set      - set IPv6 CTC CnM key\n");
    off += sprintf(buf+off, "\tIPV6 ctc Key name                (max 32 chars)Key name\n");
    off += sprintf(buf+off, "\tIPV6 gen Key name                (max 32 chars)Key name\n");
    off += sprintf(buf+off, "\tIPV6 dip Key name                (max 32 chars)Key name\n");
    off += sprintf(buf+off, "\tIPV6 l4 Key name                 (max 32 chars)Key name\n");
    off += sprintf(buf+off, "\tIPV6 ipv6 nh                     (dec)Next Header\n");
    off += sprintf(buf+off, "\tIPV6 ipv6 hoplimit               (dec)Hop Limit\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_l4_key_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_l4_key_cfg(char* buf)
{
    int off = 0;
    off += sprintf(buf+off, "echo [Key_name] [src_port] [dst_port] > ipv6_l4_key_rule_set  - set l4 key\n");
    off += sprintf(buf+off, "\tKey_name                (max 16 chars)Key name\n");
    off += sprintf(buf+off, "\tsrc_port                (dec)Source port\n");
    off += sprintf(buf+off, "\tdst_port                (dec)Destination port\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_rule_table_display - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_rule_table_display(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "\necho [table_name]         > rule_table_display  - display table rules\n");
    off += sprintf(buf+off, "\ttable_name    (str)frwd/vlan/mod/l2/l3/ipv4/ipv6_dip/ipv6_gen/ipv6_l4\n");
    return(off);
}

/*******************************************************************************
**
**  sfs_help_key_rule_delete - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_key_rule_delete(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [table_name] [rule_name]   > no_rule_set         - clear rule from table\n");
    off += sprintf(buf+off, "\ttable_name        (str)frwd/vlan/mod/l2key/l3key/ipv4key/ipv6_dip/ipv6_gen/ipv6_l4\n");

    off += sprintf(buf+off, "\trule_name         (str)Name of entry in table\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ds_load_balance_rule - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ds_load_balance_rule(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [rule_num] [parse_rule_bm] [parse_flags_bm] [key_name] [target] > add_ds_load_balance\n");
    off += sprintf(buf+off, "Creates a new ds load balance ACL\n");

    off += sprintf(buf+off, "\towner_id        (dec)Application owner ID\n");
    off += sprintf(buf+off, "\trule_num        (dec)Entry number to be added to the current ACL\n");
    off += sprintf(buf+off, "\tparse_rule_bm   (hex)Bitmap containing the significant flags for parsing fields of the packet:\n");
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_MAC_DA		 %#.4X\n", TPM_L2_PARSE_MAC_DA);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_MAC_SA		 %#.4X\n", TPM_L2_PARSE_MAC_SA);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ONE_VLAN_TAG	 %#.4X\n", TPM_L2_PARSE_ONE_VLAN_TAG);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_TWO_VLAN_TAG	 %#.4X\n", TPM_L2_PARSE_TWO_VLAN_TAG);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ETYPE		 %#.4X\n", TPM_L2_PARSE_ETYPE);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_PPPOE_SES 	 %#.4X\n", TPM_L2_PARSE_PPPOE_SES);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_PPP_PROT		 %#.4X\n", TPM_L2_PARSE_PPP_PROT);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_GEMPORT		 %#.4X\n", TPM_L2_PARSE_GEMPORT);
    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG1_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG1_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG2_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG2_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG2_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG2_FALSE);
    off += sprintf(buf+off, "\tkey_name        (str)Name of L2 key data which has been defined by user [or l2_key_empty]\n");
    off += sprintf(buf+off, "\ttarget          (dec)0 for GMAC0, 1 for GMAC1, 2 for CPU\n");

    off += sprintf(buf+off, "\n\necho [owner_id] [rule_idx] > del_ds_load_balance       - delete a DS load balance ACL\n");
    off += sprintf(buf+off, "\towner_id	    (dec)Application owner ID\n");
    off += sprintf(buf+off, "\trule_idx	    (dec)Rule Id returned from the create call\n");

	return(off);
}

/*******************************************************************************
**
**  sfs_help_l2_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_l2_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [key_name] [frwd_name] [mod_name] [pkt_mod_bm] > l2_rule_add\n");
    off += sprintf(buf+off, "Creates a new primary L2 processing ACL\n");

    off += sprintf(buf+off, "\towner_id        (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port        The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT/UNI_ANY)\n");
    off += sprintf(buf+off, "\trule_num        (dec)Entry number to be added to the current ACL\n");
    off += sprintf(buf+off, "\tparse_rule_bm   (hex)Bitmap containing the significant flags for parsing fields of the packet:\n");
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_MAC_DA             %#.4X\n", TPM_L2_PARSE_MAC_DA);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_MAC_SA             %#.4X\n", TPM_L2_PARSE_MAC_SA);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ONE_VLAN_TAG       %#.4X\n", TPM_L2_PARSE_ONE_VLAN_TAG);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_TWO_VLAN_TAG       %#.4X\n", TPM_L2_PARSE_TWO_VLAN_TAG);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ETYPE              %#.4X\n", TPM_L2_PARSE_ETYPE);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_PPPOE_SES          %#.4X\n", TPM_L2_PARSE_PPPOE_SES);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_PPP_PROT           %#.4X\n", TPM_L2_PARSE_PPP_PROT);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_GEMPORT            %#.4X\n", TPM_L2_PARSE_GEMPORT);
    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG1_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG1_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG2_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG2_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG2_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG2_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);
    off += sprintf(buf+off, "\taction          (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.4X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.4X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.4X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.4X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.4X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_MTM                  %#.4X\n", TPM_ACTION_MTM);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.4X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SPEC_MC_VID          %#.4X\n", TPM_ACTION_SPEC_MC_VID);
    off += sprintf(buf+off, "\tnext_phase      (str)Parse stage (l3/done)\n");
    off += sprintf(buf+off, "\tkey_name        (str)Name of L2 key data which has been defined by user [or l2_key_empty]\n");
    off += sprintf(buf+off, "\tfrwd_name       (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name        (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");
    off += sprintf(buf+off, "\tpkt_mod_bm      (str)Bit map of pkt modification data \n");
    off += sprintf(buf+off, "\t\tTPM_MAC_DA_SET                  %#.6X\n", TPM_MAC_DA_SET);
    off += sprintf(buf+off, "\t\tTPM_MAC_SA_SET                  %#.6X\n", TPM_MAC_SA_SET);
    off += sprintf(buf+off, "\t\tTPM_VLAN_MOD                    %#.6X\n", TPM_VLAN_MOD);
    off += sprintf(buf+off, "\t\tTPM_PPPOE_DEL                   %#.6X\n", TPM_PPPOE_DEL);
    off += sprintf(buf+off, "\t\tTPM_PPPOE_ADD                   %#.6X\n", TPM_PPPOE_ADD);
    off += sprintf(buf+off, "\t\tTPM_DSCP_SET                    %#.6X\n", TPM_DSCP_SET);
    off += sprintf(buf+off, "\t\tTPM_TTL_DEC                     %#.6X\n", TPM_TTL_DEC);
    off += sprintf(buf+off, "\t\tTPM_IPV4_UPDATE                 %#.6X\n", TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\tTPM_IPV4_SRC_SET                %#.6X\n", TPM_IPV4_SRC_SET);
    off += sprintf(buf+off, "\t\tTPM_IPV4_DST_SET                %#.6X\n", TPM_IPV4_DST_SET);
    off += sprintf(buf+off, "\t\tTPM_IPV6_UPDATE                 %#.6X\n", TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\tTPM_HOPLIM_DEC                  %#.6X\n", TPM_HOPLIM_DEC);
    off += sprintf(buf+off, "\t\tTPM_IPV6_SRC_SET                %#.6X\n", TPM_IPV6_SRC_SET);
    off += sprintf(buf+off, "\t\tTPM_IPV6_DST_SET                %#.6X\n", TPM_IPV6_DST_SET);
    off += sprintf(buf+off, "\t\tTPM_L4_SRC_SET                  %#.6X\n", TPM_L4_SRC_SET);
    off += sprintf(buf+off, "\t\tTPM_L4_DST_SET                  %#.6X\n", TPM_L4_DST_SET);

	return(off);
}

/*******************************************************************************
**
**  sfs_help_l3_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_l3_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [key_name] [frwd_name] > l3_rule_add\n");

    off += sprintf(buf+off, "Creates a new L3 type processing ACL\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT/UNI_ANY)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");
    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ETYPE              %#.4X\n", TPM_L2_PARSE_ETYPE);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_PPPOE_SES          %#.4X\n", TPM_L2_PARSE_PPPOE_SES);
    off += sprintf(buf+off, "\t\tTPM_L2_PARSE_PPP_PROT           %#.4X\n", TPM_L2_PARSE_PPP_PROT);
    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG1_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG1_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG2_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG2_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG2_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG2_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);
    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.2X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.2X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.2X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);
    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ipv4/ipv6_gen/ipv6_nh/ctc_cm/done)\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tkey_name         (str)Name of L3 key data which has been defined by user [or l3_key_empty]\n");

	return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv4_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv4_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [mod_bm] [key_name] [frwd_name] [mod_name] > ipv4_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv4 processing ACL\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         (str)The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT/UNI_ANY)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");
    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_SIP              %#.4X\n", TPM_IPv4_PARSE_SIP);
    off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_DIP              %#.4X\n", TPM_IPv4_PARSE_DIP);
    off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_DSCP             %#.4X\n", TPM_IPv4_PARSE_DSCP);
    off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_PROTO            %#.4X\n", TPM_IPv4_PARSE_PROTO);
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                %#.4X\n", TPM_PARSE_L4_SRC);
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                %#.4X\n", TPM_PARSE_L4_DST);
    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG1_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG1_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);
    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.4X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.4X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.4X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.4X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.4X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.4X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_UDP_CHKSUM_CALC      %#.4X\n", TPM_ACTION_UDP_CHKSUM_CALC);
    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ctc_cm/done)\n");
    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\t\tTPM_VLAN_MOD                    %#.4X\n", TPM_VLAN_MOD);
    off += sprintf(buf+off, "\t\tThis is the only packet modification supported in this version. \n");
    off += sprintf(buf+off, "\tkey_name         (str)Name of IPv4 key data which has been defined by user [or ipv4_key_empty]\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_gen_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_gen_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [mod_bm] [key_name] [frwd_name] [mod_name] > ipv6_gen_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 gen processing ACL\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         (str)The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT/UNI_ANY)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_SIP              %#.4X\n", TPM_IPv6_PARSE_SIP);
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_DSCP             %#.4X\n", TPM_IPv6_PARSE_DSCP);
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_HOPL             %#.4X\n", TPM_IPv6_PARSE_HOPL);

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG1_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG1_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);

    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.2X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.2X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.2X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);

    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ipv6_dip/done)\n");

    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\t\tTPM_VLAN_MOD                    %#.4X\n", TPM_VLAN_MOD);
    off += sprintf(buf+off, "\t\tThis is the only packet modification supported in this version. \n");
    off += sprintf(buf+off, "\tkey_name         (str)Name of IPv6 gen key data which has been defined by user [or ipv6_gen_key_empty]\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");


	return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_nh_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_nh_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [rule_num] [parse_flags_bm] [action] [next_phase] [nh_iter] [nh] [frwd_name] > ipv6_nh_acl_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 NH processing ACL\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);



    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.2X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.2X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.2X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);

    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ipv6_nh/ipv6_l4/ipv6_gen/ctc_cm/done)\n");

    off += sprintf(buf+off, "\tnh_iter          (dec)0:First Next Header 1:Extension Header\n");
    off += sprintf(buf+off, "\tnh               (hex)Code of Next Header\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    return(off);
}


/*******************************************************************************
**
**  sfs_help_mc_ipvx_stream_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_mc_ipvx_stream_add(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "IPV4: echo [owner_id] [stream] [igmp_mode] [mc_stream_pppoe] [vid] [src_ip] [dst_ip] [ignore] [target_ports] > mc_ipv4_stream_add\n");
	off += sprintf(buf+off, "Creates a new multicast stream\n");

	off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tstream           (dec)Stream number\n");
	off += sprintf(buf+off, "\tigmp_mode        (dec)0-snooping/1-proxy\n");
	off += sprintf(buf+off, "\tmc_pppoe         (str)true/false.\n");
	off += sprintf(buf+off, "\tvid              (dec)Vlan Id. When Id is 65535, MC packet is untagged or do not need MC VID check\n");
	off += sprintf(buf+off, "\tsrc_ip           Source IP address\n");
	off += sprintf(buf+off, "\tdst_ip           Destination IP address\n");
	off += sprintf(buf+off, "\tignore           (str)true/false. When true, the source IP address is not part of the key\n");
	off += sprintf(buf+off, "\ttarget_ports     (hex)Bitmap of port targets \n");
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_0               %#.5X\n", TPM_TRG_UNI_0);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_1               %#.5X\n", TPM_TRG_UNI_1);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_2               %#.5X\n", TPM_TRG_UNI_2);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_3               %#.5X\n", TPM_TRG_UNI_3);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_4               %#.5X\n", TPM_TRG_UNI_4);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_5               %#.5X\n", TPM_TRG_UNI_5);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_6               %#.5X\n", TPM_TRG_UNI_6);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_7               %#.5X\n", TPM_TRG_UNI_7);
	off += sprintf(buf+off, "\t\tTPM_TRG_UNI_VIRT            %#.5X\n", TPM_TRG_UNI_VIRT);
	off += sprintf(buf+off, "\t\tTPM_TRG_PORT_CPU            %#.5X\n", TPM_TRG_PORT_CPU);
	off += sprintf(buf+off, "\t\tTPM_TRG_PORT_UNI_ANY        %#.5X\n", TPM_TRG_PORT_UNI_ANY);

	off += sprintf(buf+off, "\n\tIPV4 address: dst_ip 224.x.y.z  - 239.x.y.z.  Source address w.x.y.z. Each part is decimal value in range 0..255.\n");
	off += sprintf(buf+off, "\n\n");
	off += sprintf(buf+off, "echo [owner_id] [stream] [target_ports] > mc_ipv4_stream_update\n");
	off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tstream           (dec)Stream number\n");
	off += sprintf(buf+off, "\ttarget_ports     (hex)Bitmap of port targets - SEE ABOVE\n");

	off += sprintf(buf+off, "\n\n");
	off += sprintf(buf+off, "echo [owner_id] [stream] [igmp_mode] [mc_stream_pppoe] [vid] [src_ip] [dst_ip] [ignore] [target_queue] [target_ports] > mc_ipv4_stream_set_queue_add\n");
	off += sprintf(buf+off, "\tdest_queue       (dec)destination queue number\n");
	off += sprintf(buf+off, "Creates a new multicast stream with specified dest queue number\n");

	off += sprintf(buf+off, "\nIPV6: echo [owner_id] [stream] [igmp_mode] [mc_stream_pppoe] [vid] [src_ip] [dst_ip] [ignore] [target_ports] > mc_ipv6_stream_add\n");
	off += sprintf(buf+off, "Creates a new multicast stream, params refer to IPv4 MC stream add interface, except dst_ip.\n");
	off += sprintf(buf+off, "\tIPV6 address: ff00:aabb:bbcc:ccdd:ddee:eeff:1111:2222. Each part is Hex value in range 0..ffff.\n");

	off += sprintf(buf+off, "\n\n");
	off += sprintf(buf+off, "echo [owner_id] [stream] [igmp_mode] [mc_stream_pppoe] [vid] [src_ip] [dst_ip] [ignore] [target_queue] [target_ports] > mc_ipv6_stream_set_queue_add\n");
	off += sprintf(buf+off, "\tdest_queue       (dec)destination queue number\n");
	off += sprintf(buf+off, "Creates a new multicast stream with specified dest queue number\n");

	off += sprintf(buf+off, "\n\n");
	off += sprintf(buf+off, "echo [owner_id] [stream] [target_ports] > mc_ipv6_stream_update\n");
	off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tstream           (dec)Stream number\n");
	off += sprintf(buf+off, "\ttarget_ports     (hex)Bitmap of port targets - SEE ABOVE\n");

	return(off);
}

/*******************************************************************************
**
**  sfs_help_igmp_cfg - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_igmp_cfg(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [frwd_mode] > igmp_port_forward_mode_cfg\n");
    off += sprintf(buf+off, "Configures port forward mode\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         (str)Source port - WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_ANY\n");
    off += sprintf(buf+off, "\tfrwd_mode        (str)Forwarding mode - drop/frwd/snoop\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [queue] > igmp_cpu_queue_cfg\n");
    off += sprintf(buf+off, "Configures CPU queue for IGMP\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tqueue            (dec)CPU queue 0-7\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [sa_mac] > igmp_proxy_sa_mac\n");
    off += sprintf(buf+off, "Configures the sa_mac for IGMP proxy\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsa_mac           (hex)Mac address in format, aa:bb:cc:dd:ee:ff\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] > mc_vid_key_reset\n");
    off += sprintf(buf+off, "reset the mc_uni_xlate configuration for all the UNI ports\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [src_port] [mc_uni_xlate_mode] [mc_uni_xlate_vid] > mc_vid_key_set\n");
    off += sprintf(buf+off, "Configures mc_uni_xlate_mode\n");
    off += sprintf(buf+off, "\tsrc_port                    (str)Source port - UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT\n");
    off += sprintf(buf+off, "\tmc_uni_xlate_mode           (dec)uni_xlate_mode\n");
    off += sprintf(buf+off, "\t\texclude             0\n");
    off += sprintf(buf+off, "\t\ttransparent         1\n");
    off += sprintf(buf+off, "\t\tstrip               2\n");
    off += sprintf(buf+off, "\t\ttranslate           3\n");
    off += sprintf(buf+off, "\tuni_vid                      (dec)mc uni vid\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [mc_vid] > mc_vid_cfg_set\n");
    off += sprintf(buf+off, "Configures mc vid, first use mc_vid_key_reset, then mc_vid_key_set to set per uni xlate, at last use mc_vid_cfg_set\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tmc_vid           (dec)mc_vid\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_no_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_no_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_l2                - delete L2 rule from hardware\n");
    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_l3                - delete L3 rule from hardware\n");
    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_ipv4              - delete IPv4 rule from hardware\n");
    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_ipv6_dip_acl      - delete a IPv6 DIP ACL\n");
    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_ipv6_gen_acl      - delete a IPv6 gen ACL\n");
    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_ipv6_l4_ports_acl - delete a IPv6 L4 ports ACL\n");
    off += sprintf(buf+off, "echo [owner_id] [rule_idx]            > no_rule_add_ipv6_nh_acl       - delete a IPv6 NH ACL\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\trule_idx         (dec)Rule Id returned from the create call\n");

    off += sprintf(buf+off, "\necho [owner_id] [src_port] [precedence]    > no_rule_add_ctc_cm_acl  - delete a CTC cm rule from hardware\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         (str)The packet originating source port (UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT)\n");
    off += sprintf(buf+off, "\tprecedence       (dec)Precedence - 0..7\n");

    off += sprintf(buf+off, "echo [owner_id] [l2key_name]          > no_rule_add_mac_learn         - delete MAC learn rule from hardware\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tl2key_name       (str)Name of L2 key data which define src MAC addr, empty is not allowed\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_no_mc_stream_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_no_mc_stream_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [stream]   > no_mc_stream_add_ipv4   - delete IPV4 multicast stream from hardware\n");
    off += sprintf(buf+off, "\towner_id   (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tstream     (dec)Stream Id used in the mc create call\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_oam_omci_channel - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_oam_omci_channel(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [rx_q] [llid]             > oam_channel - create OAM management channel\n");
    off += sprintf(buf+off, "\towner_id   (dec)Application owner ID\n");
    off += sprintf(buf+off, "\trx_q       (dec)Receive queue\n");
    off += sprintf(buf+off, "\tllid       (hex)LLID for management\n");
    off += sprintf(buf+off, "\t\tLLID_0  0x01     LLID_1  0x02    LLID_2  0x04     LLID_3  0x08\n");
    off += sprintf(buf+off, "\t\tLLID_4  0x10     LLID_5  0x20    LLID_6  0x40     LLID_7  0x80\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [gem_port] [rx_q] [tx_q] [tcont] > omci_channel - create OMCI management channel\n");
    off += sprintf(buf+off, "\towner_id   (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tgem_port   (dec)OMCI gem port\n");
    off += sprintf(buf+off, "\trx_q       (dec)Receive queue\n");
    off += sprintf(buf+off, "\ttx_q       (dec)Transmit queue\n");
    off += sprintf(buf+off, "\ttcont      (hex)T-CONT for management\n");
    off += sprintf(buf+off, "\t\tTCONT_0  0x01     TCONT_1  0x02    TCONT_2  0x04     TCONT_3  0x08\n");
    off += sprintf(buf+off, "\t\tTCONT_4  0x10     TCONT_5  0x20    TCONT_6  0x40     TCONT_7  0x80\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_no_oam_omci_channel - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_no_oam_omci_channel(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] > no_oam_channel   - delete OAM management channel from hardware\n");
    off += sprintf(buf+off, "echo [owner_id] > no_omci_channel  - delete OMCI management channel from hardware\n");
    off += sprintf(buf+off, "\towner_id   (dec)Application owner ID\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_setup - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_setup(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [owner_id] [wan_type] [filename] > setup   - tpm setup \n");
	off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
	off += sprintf(buf+off, "\t[wan_type]       (dec)EPON 0 or GPON 1\n");
	off += sprintf(buf+off, "\t[filename]       FILENAME/default\n");

	return(off);
}

/*******************************************************************************
**
**  sfs_help_mib_reset - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_mib_reset(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [reset_level] > mib_reset   - MIB reset\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[reset_level]    (dec)Reset level 0 or 1\n");

    return(off);
}
/*******************************************************************************
**
**  sfs_help_set_active_wan - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_set_active_wan(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [active_wan] > set_active_wan\n");
    off += sprintf(buf+off, "\t[owner_id]      (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[active_wan]    (dec)GMAC0: 0; GMAC1: 1; PON: 2\n");

    return(off);
}
/*******************************************************************************
**
**  sfs_help_hot_swap_profile - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_hot_swap_profile(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [profile_id] > hot_swap_profile\n");
    off += sprintf(buf+off, "before hot swap profile, eth0, eth1 and pon0 must be taken down by ifconfig command; and be bring up after\n");
    off += sprintf(buf+off, "\t[owner_id]      (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[profile_id]    (dec)TPM_G0_WAN_G1_INT_SWITCH: %d; TPM_G1_WAN_G0_INT_SWITCH: %d\n",
			TPM_G0_WAN_G1_INT_SWITCH, TPM_G1_WAN_G0_INT_SWITCH);

    return(off);
}
/*******************************************************************************
**
**  sfs_help_set_port_hwf_admin - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_set_port_hwf_admin(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [port] [txp] [enable] > set_port_hwf_admin\n");
    off += sprintf(buf+off, "disable/enable HWF to port\n");
    off += sprintf(buf+off, "\t[owner_id]      (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[port]          (dec)GMAC0: 0; GMAC1: 1; PON: 2\n");
    off += sprintf(buf+off, "\t[txp]           (dec)T-CONT or LLID, for GMAC0/1 it should be 0\n");
    off += sprintf(buf+off, "\t[enable]        (dec)disable: 0; enable: 1\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_erase_section - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_erase_section(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [api_type] > erase_section   - erase spceified API section\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_type]       (dec)the API PnC section to be deleted\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_flush_vtu - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_flush_vtu(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] > flush_vtu   - flush VTU on Switch\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_flush_atu - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_flush_atu(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] > flush_atu   - flush ATU on Switch\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tflush_type       (dec)0-flush all/1-flush dynamic\n");
    off += sprintf(buf+off, "\tdb_num           (dec)only 0 is valid since there is only one ATU db\n");

    return(off);
}


/*******************************************************************************
**
**  sfs_help_cfg_cpu_lpbk - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_cfg_cpu_lpbk(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [trg_port] [trg_queue] [gem port]  > add_cpu_lpbk   - Add CPU WAN loopback\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[trg_port ]       (hex)tcont/llid bitmap, 0x01:tcont0/llid0,..., 0x80: tcont7/llid7\n");
    off += sprintf(buf+off, "\t[trg_queue]       (dec)Target queue number, 0~7\n");
    off += sprintf(buf+off, "\t[gem port ]       (dec)GEM port number, 0<gem port<4096, fill 0 in EPON mode\n");
    off += sprintf(buf+off, "echo [owner_id] [trg_port] [trg_queue] [gem port]  > del_cpu_lpbk   - Del CPU WAN loopback\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[trg_port ]       (hex)tcont/llid bitmap, 0x01:tcont0/llid0,..., 0x80: tcont7/llid7\n");
    off += sprintf(buf+off, "\t[trg_queue]       (dec)Target queue number, 0~7\n");
    off += sprintf(buf+off, "\t[gem port ]       (dec)GEM port number, 0<gem port<4096, fill 0 in EPON mode\n");
    off += sprintf(buf+off, "echo [owner_id]                                    > dump_cpu_lpbk  - Dump all valid loopback entry from DB \n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_cfg_age_count - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_cfg_age_count(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [api_group] [lu_num] [lu_reset]        > get_lu_entry   - Get least used PnC entires\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_group]       (dec)PnC API group, supported TPM API group,l2[%d], L3[%d], L4[%d] \n", TPM_API_L2_PRIM, TPM_API_L3_TYPE, TPM_API_IPV4);
    off += sprintf(buf+off, "\t[lu_num   ]       (dec)required LU number queue number, 1~100\n");
    off += sprintf(buf+off, "\t[lu_reset ]       (dec)Whether need to reset PnC aging counter after read it.1: reset after read, 0: do not reset\n");
    off += sprintf(buf+off, "echo [owner_id] [api_group] [rule_idx] [lu_rule_mask]  > set_count_mask  - Set least used mask of specific PnC entry\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_group]       (dec)PnC API group, supported TPM API group,l2[%d], L3[%d], L4[%d] \n", TPM_API_L2_PRIM, TPM_API_L3_TYPE, TPM_API_IPV4);
    off += sprintf(buf+off, "\t[rule_idx ]       (dec)rule index returned when add L2/L3/L4 PnC rules\n");
    off += sprintf(buf+off, "\t[lu_rule_mask]    (dec)Whether need to mask least used loopup for specific PnC rule.1: mask, 0: enable\n");
    off += sprintf(buf+off, "echo [owner_id] [api_group] [rule_idx] [hit_reset]     > get_hit_count   - Get hitted counter for specific PnC rules\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_group]       (dec)PnC API group, supported TPM API group,l2[%d], L3[%d], L4[%d] \n", TPM_API_L2_PRIM, TPM_API_L3_TYPE, TPM_API_IPV4);
    off += sprintf(buf+off, "\t[rule_idx ]       (dec)rule index returned when add L2/L3/L4 PnC rules\n");
    off += sprintf(buf+off, "echo [owner_id] [api_group] [lu_thresh_pkts]           > set_lu_thresh   - Set least used threshold for specific counter group\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_group]       (dec)PnC API group, supported TPM API group,l2[%d], L3[%d], L4[%d] \n", TPM_API_L2_PRIM, TPM_API_L3_TYPE, TPM_API_IPV4);
    off += sprintf(buf+off, "\t[lu_thresh_pkts ] (dec)Least used lookup threshold in number of packets, 0~67108863\n");
    off += sprintf(buf+off, "echo [owner_id] [api_group]                            > reset_age_group - Reset aging counter for all the PnC rules in one couter group\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_group]       (dec)PnC API group, supported TPM API group,l2[%d], L3[%d], L4[%d] \n", TPM_API_L2_PRIM, TPM_API_L3_TYPE, TPM_API_IPV4);

    off += sprintf(buf+off, "echo [owner_id] [api_group] [high_thresh_pkts] [counters_reset] [valid_counters] > get_all_hit_counters - Get all PnC  entires for the API group lower than threshold\n");
    off += sprintf(buf+off, "\t[owner_id ]       (dec)Application owner ID\n");
    off += sprintf(buf+off, "\t[api_group]       (dec)PnC API group, supported TPM API group,l2[%d], L3[%d], L4[%d] \n", TPM_API_L2_PRIM, TPM_API_L3_TYPE, TPM_API_IPV4);
    off += sprintf(buf+off, "\t[high_thresh_pkts](dec)counter high threshold watermark\n");
    off += sprintf(buf+off, "\t[counters_reset]  (dec)Whether need to reset PnC aging counter after read it.1: reset after read, 0: do not reset\n");
    off += sprintf(buf+off, "\t[valid_counters]  (dec)The number of entries to read, returns the actually read counters\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_rate_limit - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_rate_limit(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [direction] [sched_entity] [que] [rate_limit] [bucket_size]  > rate_limit_queue_set -  set queue rate limit\n");
    off += sprintf(buf+off, "\towner_id        (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tdirection       Upstream or downstream (us/ds)\n");
    off += sprintf(buf+off, "\tsched_entity    WAN/TCONT_0/TCONT_1/../TCONT_7/UNI_ANY\n");
    off += sprintf(buf+off, "\tque             (dec)Queue id - 0..7\n");
    off += sprintf(buf+off, "\trate_limit      (dec)> 64\n");
    off += sprintf(buf+off, "\tbucket_size     (dec)TBD\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [direction] [sched_entity] [rate_limit] [bucket_size]  > rate_limit_if_set   - set interface rate limit\n");
    off += sprintf(buf+off, "\towner_id        Application owner ID\n");
    off += sprintf(buf+off, "\tdirection       Upstream or downstream (us/ds)\n");
    off += sprintf(buf+off, "\tsched_entity    WAN/TCONT_0/TCONT_1/../TCONT_7/UNI_ANY\n");
    off += sprintf(buf+off, "\trate_limit      (dec)> 64\n");
    off += sprintf(buf+off, "\tbucket_size     (dec)TBD\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [direction] [sched_entity] [mode] [que] [wrr_weight] > scheduling_mode_queue_set   - configure queue scheduling mode\n");
    off += sprintf(buf+off, "\towner_id        Application owner ID\n");
    off += sprintf(buf+off, "\tdirection       Upstream or downstream (us/ds)\n");
    off += sprintf(buf+off, "\tsched_entity    WAN/TCONT_0/TCONT_1/../TCONT_7/UNI_ANY\n");
    off += sprintf(buf+off, "\tmode            Strict or weighted round robin - strict/wrr \n");
    off += sprintf(buf+off, "\tque             (dec)Queue id - 0..7\n");
    off += sprintf(buf+off, "\twrr_weight      (dec)Weight for wrr\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [owner_id] [rate_limit] [bucket_size] > gmac0_ingr_rate_limit_set - set ingress rate limit for GMAC0 only when no switch init\n");
    off += sprintf(buf+off, "\towner_id        (dec)Application owner ID\n");
    off += sprintf(buf+off, "\trate_limit      (dec)> 64\n");
    off += sprintf(buf+off, "\tbucket_size     (dec)TBD\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [thresh_high] [thresh_low] [port] [tx_port] [tx_queue] [tgt_port] > "
     					"fc_config_set   - configure CPU port flow control\n");
    off += sprintf(buf+off, "\tthresh_high     (dec)High threshold (decriptors amount)\n");
    off += sprintf(buf+off, "\tthresh_low      (dec)Low threshold (decriptors amount)\n");
    off += sprintf(buf+off, "\tport            (dec)Port to monitor \n");
    off += sprintf(buf+off, "\ttx_port         (dec)TX port\n");
    off += sprintf(buf+off, "\ttx_queue        (dec)TX queue\n");
    off += sprintf(buf+off, "\ttgt_port        (dec)Port to apply FC\n");

    off += sprintf(buf+off, "\n");
    off += sprintf(buf+off, "echo [us_period] > fc_us_period_set - configure flow control period\n");
    off += sprintf(buf+off, "\tus_period       (dec)Flow control engine monitoring priod (us)\n");
    off += sprintf(buf+off, "\n");
#ifdef TPM_FC_DEBUG
    off += sprintf(buf+off, "echo [oneshot_hits] > fc_oneshot_set - configure oneshot statistic count\n");
    off += sprintf(buf+off, "\toneshot_hits    (dec)Flow control engine monitoring oneshot statistics hits count\n");
    off += sprintf(buf+off, "\t                Setting this value to 0 resets oneshot statistics counters\n");
    off += sprintf(buf+off, "\n");
#endif

    return(off);
}

/*******************************************************************************
**
**  sfs_help_pkt_mod_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_pkt_mod_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo  [trg_port] [mod_bm] [flag] [mod_name] > pkt_mod_eng_entry_add   - add packet modification to mod rule\n");
    off += sprintf(buf+off, "\ttrg_port   Target port - WAN/TCONT_0/TCONT_1/TCONT_2/TCONT_3/TCONT_4/TCONT_5/TCONT_6/TCONT_7/UNI_ANY\n");
    off += sprintf(buf+off, "\tmod_bm     (hex)Modification bitmap:\n");

    /* VLAN Operation only */
    off += sprintf(buf+off, "\t\t0x%05x - VLAN\n", TPM_VLAN_MOD);

    /* IPv4 Napt */
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | TTL | SIP | L4_SRC\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_SRC_SET | TPM_L4_SRC_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | TTL | DIP | L4_DST\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_DST_SET | TPM_L4_DST_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | SIP | L4_SRC | TTL\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_SRC_SET | TPM_L4_SRC_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | DIP | L4_DST | TTL\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_DST_SET | TPM_L4_DST_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | PPPoE ADD | SIP | L4_SRC | TTL\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_ADD | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_SRC_SET | TPM_L4_SRC_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | PPPoE DEL | DIP | L4_DST | TTL\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_DST_SET | TPM_L4_DST_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | PPPoE ADD | SIP | L4_SRC | TTL\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_ADD | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_SRC_SET | TPM_L4_SRC_SET);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | PPPoE DEL | DIP | L4_DST | TTL\n",
        TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE | TPM_IPV4_DST_SET | TPM_L4_DST_SET);

    /* IPv6 Route */
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | VLAN | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | PPPoE ADD | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_ADD | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | PPPoE DEL | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | VLAN | PPPoE ADD | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_ADD | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | VLAN | PPPoE DEL | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);

    /* IPv4 Route */
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | PPPoE ADD | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_ADD | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | PPPoE DEL | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | PPPoE ADD | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_ADD | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | PPPoE DEL | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE);

    /* (IPv4) Multicast */
    off += sprintf(buf+off, "\t\t0x%05x - MH\n", TPM_MH_SET);
    off += sprintf(buf+off, "\t\t0x%05x - MH | VLAN\n", TPM_MH_SET | TPM_VLAN_MOD);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | MH | SA | TTL\n", TPM_MH_SET | TPM_MAC_SA_SET | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | MH | SA | VLAN | TTL\n", TPM_MH_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | MH | DA | SA | PPPoE DEL | TTL\n", TPM_MH_SET | TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | MH | DA | SA | VLAN | PPPoE DEL | TTL\n", TPM_MH_SET | TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | SA | TTL\n", TPM_MAC_SA_SET | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | SA | VLAN | TTL\n", TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | PPPoE DEL | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv4 | DA | SA | VLAN | PPPoE DEL | TTL\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_TTL_DEC | TPM_IPV4_UPDATE);

	/* (IPv6) Multicast */
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | MH | SA | HOPLIM\n", TPM_MH_SET | TPM_MAC_SA_SET | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | MH | SA | VLAN | HOPLIM\n", TPM_MH_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | MH | DA | SA | PPPoE DEL | HOPLIM\n", TPM_MH_SET | TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | MH | DA | SA | VLAN | PPPoE DEL | HOPLIM\n", TPM_MH_SET | TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | SA | HOPLIM\n", TPM_MAC_SA_SET | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | SA | VLAN | HOPLIM\n", TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | PPPoE DEL | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_PPPOE_DEL | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);
    off += sprintf(buf+off, "\t\t0x%05x - IPv6 | DA | SA | VLAN | PPPoE DEL | HOPLIM\n", TPM_MAC_DA_SET | TPM_MAC_SA_SET | TPM_VLAN_MOD | TPM_PPPOE_DEL | TPM_HOPLIM_DEC | TPM_IPV6_UPDATE);

    off += sprintf(buf+off, "\tflag       (hex)Additional packet data:\n");
    off += sprintf(buf+off, "\t\t0x%03x - TCP\n", TPM_INT_L4_TCP);
    off += sprintf(buf+off, "\t\t0x%03x - UDP\n", TPM_INT_L4_UDP);
    off += sprintf(buf+off, "\t\t0x%03x - Split modification flag\n", TPM_INT_SPLIT_MOD);
    off += sprintf(buf+off, "\t\t0x%03x - Update UDP checksum\n", TPM_INT_UDP_CHECKSUM);
    off += sprintf(buf+off, "\t\t0x%03x - Multicast modification\n", TPM_INT_MC_MOD);

    off += sprintf(buf+off, "\tmod_name   Name of pkt modification data which has been defined by user\n");
    return(off);
}

/*******************************************************************************
**
**  sfs_help_pkt_mod_eng - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_pkt_mod_get_del_purge(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo  [trg_port] [mod_idx]       > pkt_mod_eng_entry_del   - delete packet modification from mod rule\n");
    off += sprintf(buf+off, "echo  [trg_port] [mod_idx]       > pkt_mod_eng_entry_show  - show packet modification\n");
    off += sprintf(buf+off, "echo  [trg_port]                 > pkt_mod_eng_purge       - delete all packet modifications for given port\n");
    off += sprintf(buf+off, "\ttrg_port   Target port - WAN/TCONT_0/TCONT_1/TCONT_2/TCONT_3/TCONT_4/TCONT_5/TCONT_6/TCONT_7/UNI_ANY\n");
    off += sprintf(buf+off, "\tmod_idx    (dec)Modification entry returned from pkt_mod_eng_entry_add\n");

    return(off);
}

/* jinghuaxxxxxx */
/*******************************************************************************
**
**  sys_help_ipv6_dip_acl_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sys_help_ipv6_dip_acl_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [mod_bm] [key_name] [frwd_name] [mod_name] > ipv6_dip_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 processing ACL\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         (str)The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT/UNI_ANY)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_DIP              %#.4X\n", TPM_IPv6_PARSE_DIP);

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_TRUE        %#.4X\n", TPM_PARSE_FLAG_TAG1_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TAG1_FALSE       %#.4X\n", TPM_PARSE_FLAG_TAG1_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);


    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.2X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.2X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.2X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);

    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (done)\n");

    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\t\tTPM_VLAN_MOD                    %#.4X\n", TPM_VLAN_MOD);
    off += sprintf(buf+off, "\t\tThis is the only packet modification supported in this version. \n");

    off += sprintf(buf+off, "\tkey_name         (str)Name of IPv6 key data which has been defined by user [or ipv6_dip_key_empty]\n");

    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");

    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");

    return(off);
}

#if 0
 int sys_help_del_ipv6_dip_acl_rule          (char *buf)
{
     int off = 0;

     off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_idx] [parse_rule_bm] [l2_key_name]    > no_rule_add_l2   - delete L2 rule from hardware\n");
     off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_idx] [parse_rule_bm] [l3_key_name]    > no_rule_add_l3   - delete L3 rule from hardware\n");
     off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_idx] [parse_rule_bm] [ipv4_key_name]  > no_rule_add_ipv4 - delete IPV4 rule from hardware\n");
     off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_idx] [parse_rule_bm] [ipv6_key_name]  > no_rule_add_ipv6 - delete IPV6 rule from hardware\n");
     off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
     off += sprintf(buf+off, "\tsrc_port         WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_ANY\n");
     off += sprintf(buf+off, "\trule_idx         (dec)Rule Id returned from the create call\n");
     off += sprintf(buf+off, "\tparse_rule_bm    (hex)Parsing fields bitmap used when the rule was created\n");
     off += sprintf(buf+off, "\tkey_name         The key name used when the rule was created\n");
     off += sprintf(buf+off, "\necho [owner_id] [rule_idx]  > no_rule_add_dscp_ipv4 - delete DSCP IPV4 rule from hardware\n");
     off += sprintf(buf+off, "echo [owner_id] [rule_idx]  > no_rule_add_dscp_ipv6 - delete DSCP IPV6 rule from hardware\n");
     off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
     off += sprintf(buf+off, "\trule_idx         (dec)Rule Id returned from the create call\n");


     off += sprintf(buf+off, "rule del ipv6 <owner_id> <src_port> <rule_index> \n");
     off += sprintf(buf+off, "delete an existing IPv6 processing ACL\n");

     off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
     off += sprintf(buf+off, "\tsrc_port          (str)The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_ANY)\n");
     off += sprintf(buf+off, "\rule_index         (dec)Entry index was given when adding the ACL\n");

    return(off);
}
int sys_help_del_ipv6_l4_ports_acl_rule     (char *buf)
 {
      int off = 0;

      off += sprintf(buf+off, "rule del ipv6 <owner_id>  <rule_index> \n");
      off += sprintf(buf+off, "delete an existing IPv6 l4 processing ACL\n");

      off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
      off += sprintf(buf+off, "\tsrc_port          (str)The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_ANY)\n");
      off += sprintf(buf+off, "\rule_index         (dec)Entry index was given when adding the ACL\n");

     return(off);
 }

#endif
/*******************************************************************************
**
**  sfs_help_pkt_mod_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_l4_ports_rule_add     (char *buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_port] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [l4_src_port] [l4_dst_port] [mod_bm] [frwd_name] [mod_name] > ipv6_l4_ports_acl_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 l4 processing ACL\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_port         (str)The packet originating source port (WAN/UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT/UNI_ANY)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                %#.4X\n", TPM_PARSE_L4_SRC);
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                %#.4X\n", TPM_PARSE_L4_DST);

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE         %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE        %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_TRUE      %#.4X\n", TPM_PARSE_FLAG_TO_CPU_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_TO_CPU_FALSE     %#.4X\n", TPM_PARSE_FLAG_TO_CPU_FALSE);

    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK              %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD          %#.2X\n", TPM_ACTION_SET_PKT_MOD);
    off += sprintf(buf+off, "\t\tTPM_ACTION_TO_CPU               %#.2X\n", TPM_ACTION_TO_CPU);
    off += sprintf(buf+off, "\t\tTPM_ACTION_CUST_CPU_PKT_PARSE   %#.2X\n", TPM_ACTION_CUST_CPU_PKT_PARSE);
    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ipv6_gen/ctc_cm/done)\n");
    off += sprintf(buf+off, "\tl4_src_port      (dec)L4 source port\n");
    off += sprintf(buf+off, "\tl4_dst_port      (dec)L4 destination port\n");



    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\t\tTPM_VLAN_MOD                    %#.4X\n", TPM_VLAN_MOD);
    off += sprintf(buf+off, "\t\tThis is the only packet modification supported in this version. \n");

    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");


    return(off);
 }

/*******************************************************************************
**
**  sfs_help_delete_entry_rule_table - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_delete_entry_rule_table(char *buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [rule_name]     > delete_entry_frwd_rule_table                - delete a forwarding rule entry\n");
    off += sprintf(buf+off, "echo [rule_name]     > delete_entry_mod_rule_table                 - delete a modification rule entry\n");
    off += sprintf(buf+off, "echo [rule_name]     > delete_entry_vlan_rule_table                - delete a VLAN rule entry\n");
    off += sprintf(buf+off, "echo [l2key_name]    > delete_entry_l2_rule_table                  - delete a L2 key entry\n");
    off += sprintf(buf+off, "echo [l3key_name]    > delete_entry_l3_rule_table                  - delete a L3 key entry\n");
    off += sprintf(buf+off, "echo [ipv4key_name]  > delete_entry_ipv4_rule_table                - delete a ipv4 key entry\n");
    off += sprintf(buf+off, "echo [ipv6_gen]      > delete_entry_ipv6_gen_rule_table            - delete a ipv6_gen key entry\n");
    off += sprintf(buf+off, "echo [ipv6_dip]      > delete_entry_ipv6_dip_rule_table            - delete a ipv6_dip key entry\n");
    off += sprintf(buf+off, "echo [ipv6_l4]       > delete_entry_ipv6_l4_rule_table             - delete a ipv6_l4 key entry\n");

    return(off);
}


int sfs_help_send_genquery_to_uni(char *buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [target_ports]	[pkt_num]  > send_genquery_to_uni\n");
	off += sprintf(buf+off, "send general query to uni ports\n");
    off += sprintf(buf+off, "\ttarget_ports                  (hex)Bitmap of port targets \n");
    off += sprintf(buf+off, "\t\tTPM_TRG_UNI_0               %#.4X\n", TPM_TRG_UNI_0);
    off += sprintf(buf+off, "\t\tTPM_TRG_UNI_1               %#.4X\n", TPM_TRG_UNI_1);
    off += sprintf(buf+off, "\t\tTPM_TRG_UNI_2               %#.4X\n", TPM_TRG_UNI_2);
    off += sprintf(buf+off, "\t\tTPM_TRG_UNI_3               %#.4X\n", TPM_TRG_UNI_3);
    off += sprintf(buf+off, "\t\tTPM_TRG_UNI_4               %#.4X\n", TPM_TRG_UNI_4);
    off += sprintf(buf+off, "\t\tTPM_TRG_PORT_UNI_ANY        %#.4X\n", TPM_TRG_PORT_UNI_ANY);
	off += sprintf(buf+off, "\tpkt_num                       (dec)general query packet number send to each UNI port\n");

	return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_gen_5t_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_gen_5t_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_dir] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [mod_bm] [l4_key_name] [gen_key_name] [frwd_name] [mod_name] > ipv6_gen_5t_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 SIP processing rule of 5-tuple\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_dir          (str)The packet direction (US/DS)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                 %#.4X\n", TPM_PARSE_L4_SRC);
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                 %#.4X\n", TPM_PARSE_L4_DST);
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_SIP               %#.4X\n", TPM_IPv6_PARSE_SIP);

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_L4_UDP            %#.4X\n", TPM_PARSE_FLAG_L4_UDP);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_L4_TCP            %#.4X\n", TPM_PARSE_FLAG_L4_TCP);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE          %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE         %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_PPPOE_TRUE        %#.4X\n", TPM_PARSE_FLAG_PPPOE_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_PPPOE_FALSE       %#.4X\n", TPM_PARSE_FLAG_PPPOE_FALSE);

    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK               %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT       %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE      %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD           %#.2X\n", TPM_ACTION_SET_PKT_MOD);

    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ipv6_dip/done)\n");

    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\tl4_key_name      (str)Name of IPv6 l4 ports key data which has been defined by user [or ipv6_l4_key_empty]\n");
    off += sprintf(buf+off, "\tgen_key_name     (str)Name of IPv6 gen key data which has been defined by user [or ipv6_gen_key_empty]\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_dip_5t_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_dip_5t_rule_add(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_dir] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [mod_bm] [l4_key_name] [gen_key_name] [dip_key_name] [frwd_name] [mod_name] > ipv6_dip_5t_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 DIP processing rule of 5-tuple\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_dir          (str)The packet direction (US/DS)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                 %#.4X\n", TPM_PARSE_L4_SRC);
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                 %#.4X\n", TPM_PARSE_L4_DST);
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_SIP               %#.4X\n", TPM_IPv6_PARSE_SIP);
    off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_DIP               %#.4X\n", TPM_IPv6_PARSE_DIP);

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_L4_UDP            %#.4X\n", TPM_PARSE_FLAG_L4_UDP);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_L4_TCP            %#.4X\n", TPM_PARSE_FLAG_L4_TCP);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE          %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE         %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_PPPOE_TRUE        %#.4X\n", TPM_PARSE_FLAG_PPPOE_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_PPPOE_FALSE       %#.4X\n", TPM_PARSE_FLAG_PPPOE_FALSE);

    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK               %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT       %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE      %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD           %#.2X\n", TPM_ACTION_SET_PKT_MOD);

    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (done)\n");
    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\tl4_key_name      (str)Name of IPv6 key data which has been defined by user [or ipv6_l4_key_empty]\n");
    off += sprintf(buf+off, "\tgen_key_name     (str)Name of IPv6 key data which has been defined by user [or ipv6_gen_key_empty]\n");
    off += sprintf(buf+off, "\tdip_key_name     (str)Name of IPv6 key data which has been defined by user [or ipv6_dip_key_empty]\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");

    return(off);
}

/*******************************************************************************
**
**  sfs_help_ipv6_l4_ports_5t_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ipv6_l4_ports_5t_rule_add(char *buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [src_dir] [rule_num] [parse_rule_bm] [parse_flags_bm] [action] [next_phase] [mod_bm] [l4_key_name] [frwd_name] [mod_name] > ipv6_l4_ports_5t_rule_add\n");
    off += sprintf(buf+off, "Creates a new IPv6 L4 ports processing rule of 5-tuple\n");

    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tsrc_dir          (str)The packet direction (US/DS)\n");
    off += sprintf(buf+off, "\trule_num         (dec)Entry number to be added to the current ACL\n");

    off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                 %#.4X\n", TPM_PARSE_L4_SRC);
    off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                 %#.4X\n", TPM_PARSE_L4_DST);

    off += sprintf(buf+off, "\tparse_flags_bm   (hex)Bitmap containing the significant flags result of the primary ACL filtering\n");
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_L4_UDP            %#.4X\n", TPM_PARSE_FLAG_L4_UDP);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_L4_TCP            %#.4X\n", TPM_PARSE_FLAG_L4_TCP);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_TRUE          %#.4X\n", TPM_PARSE_FLAG_MTM_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_MTM_FALSE         %#.4X\n", TPM_PARSE_FLAG_MTM_FALSE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_PPPOE_TRUE        %#.4X\n", TPM_PARSE_FLAG_PPPOE_TRUE);
    off += sprintf(buf+off, "\t\tTPM_PARSE_FLAG_PPPOE_FALSE       %#.4X\n", TPM_PARSE_FLAG_PPPOE_FALSE);

    off += sprintf(buf+off, "\taction           (hex)Action associated with the rule:\n");
    off += sprintf(buf+off, "\t\tTPM_ACTION_DROP_PK               %#.2X\n", TPM_ACTION_DROP_PK);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT       %#.2X\n", TPM_ACTION_SET_TARGET_PORT);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE      %#.2X\n", TPM_ACTION_SET_TARGET_QUEUE);
    off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD           %#.2X\n", TPM_ACTION_SET_PKT_MOD);

    off += sprintf(buf+off, "\tnext_phase       (str)Parse stage (ipv6_gen/ctc_cm/done)\n");
    off += sprintf(buf+off, "\tmod_bm           (hex)Packet fields modification command bitmap:\n");
    off += sprintf(buf+off, "\tl4_key_name      (str)Name of IPv6 key data which has been defined by user [or ipv6_l4_key_empty]\n");
    off += sprintf(buf+off, "\tfrwd_name        (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
    off += sprintf(buf+off, "\tmod_name         (str)Name of pkt modification data which has been defined by user [or mod_empty]\n");

    return(off);
 }

/*******************************************************************************
**
**  sfs_help_ctc_cm_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ctc_cm_rule_add(char *buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [owner_id] [src_port] [precedence] [l2_parse_rule_bm] [ipv4_parse_rule_bm] [action] [l2_key_name] [ipv4_key_name] [frwd_name] [p_bits] > ctc_cm_acl_rule_add\n");
	off += sprintf(buf+off, "Creates a CTC CnM rule\n");

	off += sprintf(buf+off, "\towner_id           (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tsrc_port           (str)The packet originating source port (UNI_0/UNI_1/UNI_2/UNI_3/UNI_4/UNI_5/UNI_6/UNI_7/UNI_VIRT)\n");
	off += sprintf(buf+off, "\tprecedence         (dec)Precedence - 0..7\n");

	off += sprintf(buf+off, "\tl2_parse_rule_bm   (hex)Bitmap containing the significant flags for parsing fields of the packet:\n");
	off += sprintf(buf+off, "\t\tTPM_L2_PARSE_MAC_DA             %#.4X\n", TPM_L2_PARSE_MAC_DA);
	off += sprintf(buf+off, "\t\tTPM_L2_PARSE_MAC_SA             %#.4X\n", TPM_L2_PARSE_MAC_SA);
	off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ONE_VLAN_TAG       %#.4X\n", TPM_L2_PARSE_ONE_VLAN_TAG);
	off += sprintf(buf+off, "\t\tTPM_L2_PARSE_ETYPE              %#.4X\n", TPM_L2_PARSE_ETYPE);

	off += sprintf(buf+off, "\tipv4_parse_rule_bm (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
	off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_SIP                 %#.4X\n", TPM_IPv4_PARSE_SIP);
	off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_DIP                 %#.4X\n", TPM_IPv4_PARSE_DIP);
	off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_DSCP                %#.4X\n", TPM_IPv4_PARSE_DSCP);
	off += sprintf(buf+off, "\t\tTPM_IPv4_PARSE_PROTO               %#.4X\n", TPM_IPv4_PARSE_PROTO);
	off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                   %#.4X\n", TPM_PARSE_L4_SRC);
	off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                   %#.4X\n", TPM_PARSE_L4_DST);

	off += sprintf(buf+off, "\taction	           (hex)Action associated with the rule:\n");
	off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_PORT      %#.4X\n", TPM_ACTION_SET_TARGET_PORT);
	off += sprintf(buf+off, "\t\tTPM_ACTION_SET_TARGET_QUEUE     %#.4X\n", TPM_ACTION_SET_TARGET_QUEUE);
	off += sprintf(buf+off, "\t\tTPM_ACTION_SET_PKT_MOD	        %#.4X\n", TPM_ACTION_SET_PKT_MOD);

	off += sprintf(buf+off, "\tl2_key_name        (str)Name of L2 key data which has been defined by user [or l2_key_empty]\n");
	off += sprintf(buf+off, "\tipv4_key_name      (str)Name of IPV4 key data which has been defined by user [or ipv4_key_empty]\n");
	off += sprintf(buf+off, "\tfrwd_name          (str)Name of pkt forwarding data which has been defined by user [or frwd_empty]\n");
	off += sprintf(buf+off, "\tp_bits             (dec)P_bit  - 0..7\n");

	off += sprintf(buf+off, "\necho [owner_id] [src_port] [precedence] [ipv6_parse_rule_bm] [action] [ipv6_key_name] [frwd_name] [p_bits] > ctc_cm_ipv6_acl_rule_add\n");
	off += sprintf(buf+off, "Creates a CTC CnM rule\n");

	off += sprintf(buf+off, "\towner_id           (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tparse_rule_bm    (hex)Bitmap containing the significant flags for parsing fields of the packet\n");
	off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_SIP              %#.4X\n", TPM_IPv6_PARSE_SIP);
	off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_DIP              %#.4X\n", TPM_IPv6_PARSE_DIP);
	off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_DSCP             %#.4X\n", TPM_IPv6_PARSE_DSCP);
	off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_NH               %#.4X\n", TPM_IPv6_PARSE_NH);
	off += sprintf(buf+off, "\t\tTPM_IPv6_PARSE_HOPL             %#.4X\n", TPM_IPv6_PARSE_HOPL);
	off += sprintf(buf+off, "\t\tTPM_PARSE_L4_SRC                %#.4X\n", TPM_PARSE_L4_SRC);
	off += sprintf(buf+off, "\t\tTPM_PARSE_L4_DST                %#.4X\n", TPM_PARSE_L4_DST);

	return(off);
}

/*******************************************************************************
**
**  sfs_help_ctc_cm_set_ipv6_parse_win - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_ctc_cm_set_ipv6_parse_win(char* buf)
{
    int off = 0;

    off += sprintf(buf+off, "echo [owner_id] [ipv6_parse_win] > ctc_cm_set_ipv6_parse_win   - set ipv6 parse window\n");
    off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
    off += sprintf(buf+off, "\tipv6_parse_win   (dec)ipv6 parse window\n");
    off += sprintf(buf+off, "\t\tTPM_CTC_CM_IPv6_FIRST_24B	 %d\n", TPM_CTC_CM_IPv6_FIRST_24B);
    off += sprintf(buf+off, "\t\tTPM_CTC_CM_IPv6_SECOND_24B	 %d\n", TPM_CTC_CM_IPv6_SECOND_24B);

    return(off);
}

/*******************************************************************************
**
**  sfs_help_tpm_self_check - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_tpm_self_check(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [owner_id] [check_level] > tpm_self_check   - tpm rules check\n");
	off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
	off += sprintf(buf+off, "\t[check_level]    (dec)0: check without correct; 1: check with correct\n");

	return(off);
}


/*******************************************************************************
**
**  sfs_help_mac_learn_rule_add - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_mac_learn_rule_add(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [owner_id] [l2_key_name] > mac_learn_rule_add\n");
	off += sprintf(buf+off, "Creates a new L2 MAC learn rule ACL\n");
	off += sprintf(buf+off, "\towner_id         (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tl2_key_name      (str)Name of L2 key data which define src MAC addr, empty is not allowed \n");

	return(off);

}

/*******************************************************************************
**
**  sfs_help_mac_learn_def_act_set - see header of sfs_tpm_cfg_index
**
*******************************************************************************/
int sfs_help_mac_learn_def_act_set(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [owner_id] [mac_conf] > mac_learn_default_rule_act_set\n");
	off += sprintf(buf+off, "Set the action of mac learn default rule\n");
	off += sprintf(buf+off, "\towner_id        (dec)Application owner ID\n");
	off += sprintf(buf+off, "\tmac_conf        (hex)Action associated with mac learn default rule: \n");
	off += sprintf(buf+off, "\t\tTPM_UNK_MAC_TRAP,     (trap packet to CPU)     %#.2X\n", TPM_UNK_MAC_TRAP);
	off += sprintf(buf+off, "\t\tTPM_UNK_MAC_DROP,     (drop the packet)        %#.2X\n", TPM_UNK_MAC_DROP);
	off += sprintf(buf+off, "\t\tTPM_UNK_MAC_CONTINUE, (frwd packet to GMAC1)   %#.2X\n", TPM_UNK_MAC_CONTINUE);

	return(off);
}

/*******************************************************************************
**
**  sfs_help_drop_pre
**
*******************************************************************************/
int sfs_help_drop_pre(char* buf)
{
	int off = 0;

	off += sprintf(buf+off, "echo [mode] > drop_pre_set\n");
	off += sprintf(buf+off, "Set the drop precedence mode\n");
	off += sprintf(buf+off, "\tmode	           (hex)drop precedence mode: \n");
	off += sprintf(buf+off, "\t\TPM_DROP_PRECEDENCE_NONE: %d\n", TPM_DROP_PRECEDENCE_NONE);
	off += sprintf(buf+off, "\t\TPM_DROP_PRECEDENCE_8P0D: %d\n", TPM_DROP_PRECEDENCE_8P0D);
	off += sprintf(buf+off, "\t\TPM_DROP_PRECEDENCE_7P1D: %d\n", TPM_DROP_PRECEDENCE_7P1D);
	off += sprintf(buf+off, "\t\TPM_DROP_PRECEDENCE_6P2D: %d\n", TPM_DROP_PRECEDENCE_6P2D);
	off += sprintf(buf+off, "\t\TPM_DROP_PRECEDENCE_5P3D: %d\n", TPM_DROP_PRECEDENCE_5P3D);
	off += sprintf(buf+off, "\t\TPM_DROP_PRECEDENCE_DEI:  %d\n\n", TPM_DROP_PRECEDENCE_DEI);
	off += sprintf(buf+off, "echo [dump] > drop_pre_show\n");
	off += sprintf(buf+off, "Show the drop precedence mode\n");
	off += sprintf(buf+off, "\tdump	   (dec)Any dump value\n");	

	return(off);
}

#endif /* CONFIG_MV_TPM_SYSFS_HELP */

