Skip to content

geesun/mini-cli

Repository files navigation

mini-cli

The mini-cli is define for embedded device, it make the command line define as easy as we define a function. It also support define the command line which the callback in kernel space. The code was base on Linux but it has been ported to vxWorks and ecos.

Components

  • Command auto complete
  • Authentication management
  • Argument validation
  • Console command line
  • Multiple Session telnet server
  • Command hook in Linux kernel space
  • Error code interpretation to format string
  • Virtual terminal(Vt100) short cut support
  • Command history management

Example command define

  • Define simple command

    CLI_DEFINE(
        cli_handler_cwmp_debug,
        cli_cmd_cwmp_debug,
        "debug (stack|cm) (on|off)",
        "Cwmp debug setting \n"
        "Stack debug\n"
        "Configure management debug\n"
        "Enable the debug \n"
        "Disable the debug\n"
    )
    {
        cs_uint8 debug = 0;
        cs_uint8 cm = 0;
    
        if(strcmp(argv[0],"cm") == 0){
            cm = 1;
        }
    
        if(strcmp(argv[1],"on") == 0){
            debug = 1;
        }
    
        /* do stuff */
    
        return CLI_CMD_OK;
    }
    
    /* install the command */
    cli_install_pri_cmd(CLI_PRI_DEBUG,CLI_NODE_CWMP,&cli_cmd_cwmp_debug);
    
  • Define the command which callback in Linux kernel space

    CLI_KERNEL_DEFINE(
            cli_handle_kernel,
            cli_kernel_cmd,
            "show kernel <1-20000> ",
            "show information\n"
            "kernel config \n"
            "block id"
            )
    #ifdef __KERNEL__
    {
        cli_print(cli,"block id = %s \n",argv[0]);
        /*call any kernel space function*/
        return CLI_CMD_E_PARAM;
    }
    #endif
    
    /* this line must be called in userspace and kernel space */
    CLI_KERNEL_CMD_INSTALL(CLI_NODE_ID_CONFIG,&cli_kernel_cmd);
    

Command define rules

  • Lowercase word is keyword

    show interface <1-3>
    
  • Uppercase word is input anything

    add user NAME
    
  • Range define between < and >

    show interface <0-5>
    
  • Mac address define A:B:C:D:E:F

    show fdb A:B:C:D:E:F
    
  • IPv4 Address define as A.B.C.D

    ping A.B.C.D
    
  • IPv6 address define as A::B

    ping A::B
    
  • Option parameter should at end and define between [ and ]

    add USER [PASSWD]
    
  • One parameter support more then one type, use | to split the type and surround with ()

    debug (on|off)
    config ip (A.B.C.D|A::B)
    

API

  • cli_init
  • cli_main
  • cli_add_node
  • cli_enter_node
  • cli_install_cmd
  • cli_install_pri_cmd
  • cli_print
  • cli_get_input
  • cli_echo_enable
  • cli_server_start
  • cli_telnetd_start
  • cli_context_set
  • cli_context_get
  • cli_logo_set
  • cli_hostname_set
  • CLI_DEFINE
  • CLI_DEFINE_ALIAS
  • CLI_KERNEL_DEFINE
  • CLI_KERNEL_CMD_INSTALL

About

Command Line Framework for embed device

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published