BAL and Maple Release 2.2
Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/bcm68620_release/release/host_reference/cli/bcmcli_session.h b/bcm68620_release/release/host_reference/cli/bcmcli_session.h
new file mode 100644
index 0000000..30d873d
--- /dev/null
+++ b/bcm68620_release/release/host_reference/cli/bcmcli_session.h
@@ -0,0 +1,309 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software. The special exception does not apply to any modifications
+ of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+
+/*******************************************************************
+ * bcmcli_session.h
+ *
+ * BCM CLI engine - session management
+ *
+ *******************************************************************/
+
+#ifndef BCMCLI_SESSION_H
+
+#define BCMCLI_SESSION_H
+
+#include <bcmos_system.h>
+#include <stdarg.h>
+#include "bcmolt_string.h"
+
+/** \defgroup bcmcli_session Management Session Control
+ *
+ * APIs in this header file allow to create/destroy management sessions.
+ * Management session is characterized by its access level and also
+ * input/output functions.
+ * Management sessions allow managed entities in the system to communicate
+ * with local or remote managers (e.g., local or remote shell or NMS)
+ * @{
+ */
+
+/** Access rights */
+typedef enum
+{
+ BCMCLI_ACCESS_GUEST, /**< Guest. Doesn't have access to commands and directories registered with ADMIN rights */
+ BCMCLI_ACCESS_ADMIN, /**< Administrator: full access */
+ BCMCLI_ACCESS_DEBUG, /**< Administrator: full access + extended debug features */
+} bcmcli_access_right;
+
+/** Line edit mode */
+typedef enum
+{
+ BCMCLI_LINE_EDIT_DEFAULT,/**< Enable line editing and history if CONFIG_EDITLINE is defined, disable otherwise */
+ BCMCLI_LINE_EDIT_ENABLE, /**< Enable line editing. Requires CONFIG_EDITLINE define and libedit-dev library */
+ BCMCLI_LINE_EDIT_DISABLE,/**< Disable line editing and history */
+} bcmcli_line_edit_mode;
+
+
+/** Management session handle
+ */
+typedef struct bcmcli_session bcmcli_session;
+
+
+/** Session parameters structure.
+ * See \ref bcmcli_session_open
+ */
+typedef struct bcmcli_session_parm
+{
+ const char *name; /**< Session name */
+ void *user_priv; /**< Private user's data */
+
+ /** Session's output function. NULL=use write(stdout)
+ * returns the number of bytes written or <0 if error
+ */
+ int (*write)(bcmcli_session *session, const char *buf, uint32_t size);
+
+ /** Session line input function. NULL=use default(stdin[+line edit) */
+ char *(*gets)(bcmcli_session *session, char *buf, uint32_t size);
+
+ /** Session char input function. NULL=use bcmos_getchar() */
+ int (*get_char)(bcmcli_session *session);
+
+ /** Fill the specified buffer with the prompt for this session (NULL-terminated). NULL = no prompt. */
+ void (*get_prompt)(bcmcli_session *session, char *buf, uint32_t max_len);
+
+ /** Access rights */
+ bcmcli_access_right access_right;
+
+ /** Line editing mode */
+ bcmcli_line_edit_mode line_edit_mode;
+
+ /** Extra data size to be allocated along with session control block.
+ * The extra data is accessible using bcmcli_session_data().
+ * Please note that if session is created using bcmcli_session_open(),
+ * extra_size is reserved.
+ * It can only be used for user context allocation if session is created
+ * using bcmcli_session_open_user()
+ */
+ uint32_t extra_size;
+} bcmcli_session_parm;
+
+
+/** Open monitor session
+ *
+ * Monitor supports multiple simultaneous sessions with different
+ * access rights.
+ * Note that there already is a default session with full administrative rights,
+ * that takes input from stdin and outputs to stdout.
+ *
+ * Please don't use parm.extra_size. This field is reserved.
+ *
+ * \param[in] parm Session parameters. Must not be allocated on the stack.
+ * \param[out] p_session Session handle
+ * \return
+ * 0 =OK\n
+ * <0 =error code
+ */
+bcmos_errno bcmcli_session_open(const bcmcli_session_parm *parm, bcmcli_session **p_session);
+
+
+/** Close monitor session.
+ * \param[in] session Session handle
+ */
+void bcmcli_session_close(bcmcli_session *session );
+
+
+/** Write function.
+ * Write buffer to the current session.
+ * \param[in] session Session handle. NULL=use stdout
+ * \param[in] buf output buffer
+ * \param[in] size number of bytes to be written
+ * \return
+ * >=0 - number of bytes written\n
+ * <0 - output error
+ */
+int bcmcli_session_write(bcmcli_session *session, const char *buf, uint32_t size);
+
+
+/** Read line
+ * \param[in] session Session handle. NULL=use default
+ * \param[in,out] buf input buffer
+ * \param[in] size buf size
+ * \return
+ * buf if successful
+ * NULL if EOF or error
+ */
+char *bcmcli_session_gets(bcmcli_session *session, char *buf, uint32_t size);
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in] session Session handle. NULL=use stdout
+ * \param[in] format print format - as in printf
+ */
+void bcmcli_session_print(bcmcli_session *session, const char *format, ...)
+#ifndef BCMCLI_SESSION_DISABLE_FORMAT_CHECK
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+
+/** Print function.
+ * Prints in the context of current session.
+ * \param[in] session Session handle. NULL=use stdout
+ * \param[in] format print format - as in printf
+ * \param[in] ap parameters list. Undefined after the call
+ */
+void bcmcli_session_vprint(bcmcli_session *session, const char *format, va_list ap);
+
+/** Print buffer in hexadecimal format
+ * \param[in] session Session handle. NULL=use stdout
+ * \param[in] buffer Buffer address
+ * \param[in] offset Start offset in the buffer
+ * \param[in] count Number of bytes to dump
+ * \param[in] indent Optional indentation string
+ */
+void bcmcli_session_hexdump(bcmcli_session *session, const void *buffer, uint32_t offset, uint32_t count, const char *indent);
+
+/** Get extra data associated with the session
+ * \param[in] session Session handle. NULL=default session
+ * \return extra_data pointer or NULL if there is no extra data
+ */
+void *bcmcli_session_data(bcmcli_session *session);
+
+
+/** Get user_priv provided in session parameters when it was registered
+ * \param[in] session Session handle. NULL=default session
+ * \return usr_priv value
+ */
+void *bcmcli_session_user_priv(bcmcli_session *session);
+
+
+/** Get session name
+ * \param[in] session Session handle. NULL=use stdin
+ * \return session name
+ */
+const char *bcmcli_session_name(bcmcli_session *session);
+
+
+/** Get session access rights
+ * \param[in] session Session handle. NULL=default debug session
+ * \return session access right
+ */
+bcmcli_access_right bcmcli_session_access_right(bcmcli_session *session);
+
+/** @} end of bcmcli_session group */
+
+/** Low-level interface for when session is used outside CLI
+ *
+ * \param[in] parm Session parameters. Must not be allocated on the stack.
+ * \param[out] p_session Session handle
+ * \return
+ * 0 =OK\n
+ * <0 =error code
+ */
+int bcmcli_session_open_user(const bcmcli_session_parm *parm, bcmcli_session **p_session);
+
+/** Open a session that prints to the specified string
+ */
+bcmos_errno bcmcli_session_open_string(bcmcli_session **session, bcmolt_string *str);
+
+/** Configure RAW input mode
+ *
+ * \param[in] session Session handle
+ * \param[in] is_raw TRUE=enable raw mode, FALSE=disable raw mode
+ * \return
+ * =0 - OK \n
+ * BCM_ERR_NOT_SUPPORTED - raw mode is not supported\n
+ */
+bcmos_errno bcmcli_session_raw_mode_set(bcmcli_session *session, bcmos_bool is_raw);
+
+/** Context extension
+ *
+ * - if no command - display list of command or extend command
+ * - if prev char is " "
+ * - if positional and next parm is enum - show/extends list of matching values
+ * - else - show/extend list of unused parameters
+ * else
+ * - if entering value and enum - show/extends list of matching values
+ * - else - show/extend list of matching unused parameters
+ *
+ * \param[in] session Session handle
+ * \param[in] input_string String to be parsed
+ * \param[out] insert_str String to insert at cursor position
+ * \param[in] insert_size Insert buffer size
+ * \return
+ * =0 - OK \n
+ * BCM_ERR_PARM - parsing error\n
+ */
+bcmos_errno bcmcli_extend(bcmcli_session *session, char *input_string,
+ char *insert_str, uint32_t insert_size);
+
+
+#ifdef BCMCLI_INTERNAL
+
+#define BCMCLI_SESSION_OUTBUF_LEN 2048
+#define BCMCLI_MAX_PROMPT_LEN 8
+
+/* editline functionality */
+/* If libedit is included - it takes precedence */
+#ifdef CONFIG_LIBEDIT
+#include <histedit.h>
+#undef CONFIG_LINENOISE
+#endif /* #ifdef CONFIG_LIBEDIT */
+
+#ifdef CONFIG_LINENOISE
+#include <linenoise.h>
+#endif
+
+/* Management session structure */
+struct bcmcli_session
+{
+ bcmcli_session *next;
+ bcmcli_session_parm parms;
+ uint32_t magic;
+#define BCMCLI_SESSION_MAGIC (('s'<<24)|('e'<<16)|('s'<<8)|'s')
+#define BCMCLI_SESSION_MAGIC_DEL (('s'<<24)|('e'<<16)|('s'<<8)|'~')
+
+ /* Line editing and history support */
+#ifdef CONFIG_LIBEDIT
+ EditLine *el;
+ History *history;
+ HistEvent histevent;
+#endif
+#ifdef CONFIG_LINENOISE
+ linenoiseSession *ln_session;
+#endif
+ char outbuf[BCMCLI_SESSION_OUTBUF_LEN];
+ char prompt_buf[BCMCLI_MAX_PROMPT_LEN];
+
+ /* Followed by session data */
+};
+#endif
+
+#endif /* #ifndef BCMCLI_SESSION_H */