mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly
For automated changes based on OAI PL v1.1:
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml
The rest (cmake, files with missing license, cmake) manually.
191 lines
8.3 KiB
C
191 lines
8.3 KiB
C
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
/*!
|
|
* \brief: include file for telnet server implementation
|
|
*/
|
|
|
|
#ifndef TELNETSRV_H
|
|
#define TELNETSRV_H
|
|
|
|
#include <common/ran_context.h>
|
|
|
|
#define TELNET_MAX_MSGLENGTH 2048
|
|
#define TELNET_PROMPT_PREFIX "softmodem"
|
|
#define TELNET_MAXCMD 64
|
|
#define TELNET_CMD_MAXSIZE 64
|
|
#define TELNET_HELPSTR_SIZE 80
|
|
|
|
/* status return by the command parser after it analysed user input */
|
|
#define CMDSTATUS_NOCMD 0
|
|
#define CMDSTATUS_EXIT 1
|
|
#define CMDSTATUS_FOUND 2
|
|
#define CMDSTATUS_VARNOTFOUND 3
|
|
#define CMDSTATUS_NOTFOUND 4
|
|
|
|
/* definitions to store 2 dim table, used to store command results before */
|
|
/* displaying them either on console or web page */
|
|
#define TELNET_MAXLINE_NUM 100
|
|
#define TELNET_MAXCOL_NUM 10
|
|
|
|
typedef struct col {
|
|
char coltitle[TELNET_CMD_MAXSIZE];
|
|
unsigned int coltype;
|
|
} acol_t;
|
|
|
|
typedef struct line {
|
|
char *val[TELNET_MAXCOL_NUM];
|
|
} aline_t;
|
|
|
|
typedef struct webdatadef {
|
|
char tblname[TELNET_HELPSTR_SIZE];
|
|
int numlines;
|
|
int numcols;
|
|
acol_t columns[TELNET_MAXCOL_NUM];
|
|
aline_t lines[TELNET_MAXLINE_NUM];
|
|
} webdatadef_t;
|
|
/*----------------------------------------------------------------------------*/
|
|
/* structure to be used when adding a module to the telnet server */
|
|
/* This is the second parameter of the add_telnetcmd function, which can be used */
|
|
/* to add a set of new command to the telnet server shell */
|
|
typedef void(*telnet_printfunc_t)(const char* format, ...);
|
|
typedef int(*cmdfunc_t)(char*, int, telnet_printfunc_t prnt);
|
|
typedef int (*webfunc_t)(char *cmdbuff, int debug, telnet_printfunc_t prnt, ...);
|
|
typedef int (*webfunc_getdata_t)(const char *cmdbuff, int debug, void *data, telnet_printfunc_t prnt);
|
|
typedef int(*qcmdfunc_t)(char*, int, telnet_printfunc_t prnt,void *arg);
|
|
|
|
#define TELNETSRV_CMDFLAG_PUSHINTPOOLQ (1 << 0) // ask the telnet server to push the command in a thread pool queue
|
|
#define TELNETSRV_CMDFLAG_GETWEBDATA (1 << 1) // When called from web server, use the getdata variant of the function
|
|
#define TELNETSRV_CMDFLAG_TELNETONLY (1 << 2) // Command only for telnet client connections
|
|
#define TELNETSRV_CMDFLAG_WEBSRVONLY (1 << 3) // Command only for web server connections
|
|
#define TELNETSRV_CMDFLAG_CONFEXEC (1 << 4) // Ask for confirm before exec
|
|
#define TELNETSRV_CMDFLAG_GETWEBTBLDATA (1 << 8) // When called from web server, use the get table data variant of the function
|
|
#define TELNETSRV_CMDFLAG_NEEDPARAM (1 << 10) // websrv: The command needs a parameter
|
|
#define TELNETSRV_CMDFLAG_WEBSRV_SETRETURNTBL (1 << 11) // websrv: set callback returns a new table
|
|
#define TELNETSRV_CMDFLAG_AUTOUPDATE (1 << 12) // command can be re-submitted automatically for result update
|
|
typedef struct cmddef {
|
|
char cmdname[TELNET_CMD_MAXSIZE];
|
|
char helpstr[TELNET_HELPSTR_SIZE];
|
|
cmdfunc_t cmdfunc;
|
|
union {
|
|
webfunc_t webfunc;
|
|
webfunc_getdata_t webfunc_getdata;
|
|
};
|
|
unsigned int cmdflags;
|
|
void *qptr;
|
|
} telnetshell_cmddef_t;
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
/* structure used to send a command via a message queue to enable */
|
|
/* executing a command in a thread different from the telnet server thread */
|
|
typedef struct telnetsrv_qmsg {
|
|
qcmdfunc_t cmdfunc;
|
|
telnet_printfunc_t prnt;
|
|
int debug;
|
|
char *cmdbuff;
|
|
} telnetsrv_qmsg_t;
|
|
/*----------------------------------------------------------------------------*/
|
|
/*structure to be used when adding a module to the telnet server */
|
|
/* This is the first parameter of the add_telnetcmd function, which can be used */
|
|
/* to add a set of new variables which can be got/set from the telnet server shell */
|
|
/* var type: bits 0-3, type value (1 to 15)
|
|
* type modifier, bits 4-31 */
|
|
#define TELNET_VARTYPE_INT32 1
|
|
#define TELNET_VARTYPE_INT16 2
|
|
#define TELNET_VARTYPE_INT64 3
|
|
#define TELNET_VARTYPE_STRING 4
|
|
#define TELNET_VARTYPE_DOUBLE 5
|
|
#define TELNET_VARTYPE_INT8 6
|
|
#define TELNET_VARTYPE_UINT 7
|
|
|
|
#define TELNET_CHECKVAL_RDONLY 16
|
|
#define TELNET_CHECKVAL_BOOL 32
|
|
#define TELNET_VAR_NEEDFREE 64
|
|
#define TELNET_CHECKVAL_LOGLVL 128
|
|
#define TELNET_CHECKVAL_SIMALGO 256
|
|
typedef struct variabledef {
|
|
char varname[TELNET_CMD_MAXSIZE];
|
|
char vartype;
|
|
char checkval;
|
|
void *varvalptr;
|
|
} telnetshell_vardef_t;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
/* internal structure definitions */
|
|
/* cmdparser_t is used to store all modules which have been added to the telnet server. */
|
|
/* Each time the add_telnetcmd function is used, the internal array cmdparser_t[] of the */
|
|
/* telnet server is populated with the new commands and variables */
|
|
typedef struct cmdparser {
|
|
char module[TELNET_CMD_MAXSIZE]; // module name = first token of the telnet shell command
|
|
telnetshell_cmddef_t *cmd; // array of functions added to the shell
|
|
telnetshell_vardef_t *var; // array of variables added to the shell
|
|
} cmdparser_t;
|
|
|
|
/* telnetsrv_params_t is an internal structure storing all the current parameters and */
|
|
/* global variables used by the telnet server */
|
|
typedef struct {
|
|
pthread_t telnet_pthread; // thread id of the telnet server
|
|
pthread_t telnetclt_pthread; // thread id of the telnet client (used when listenstdin set to true)
|
|
int telnetdbg; // debug level of the server
|
|
int priority; // server running priority
|
|
char *histfile; // command history
|
|
int histsize; // command history length
|
|
char *logfile; // filename to use when redirecting output to file
|
|
int new_socket; // socket of the client connection
|
|
int logfilefd; // file id of the log file when log output is redirected to a file
|
|
int saved_stdout; // file id of the previous stdout, used to be able to restore original stdout
|
|
cmdparser_t CmdParsers[TELNET_MAXCMD]; // array of registered modules.
|
|
char msgbuff[TELNET_MAX_MSGLENGTH]; // internal buffer of the client_printf function which is used to print to the client terminal */
|
|
unsigned int listenport; // ip port the telnet server is listening on
|
|
char *listenaddr; // ip address the telnet server is listening on
|
|
unsigned int listenstdin; // enable command input from stdin
|
|
unsigned int loopcount; // loop command param: number of loop iteration
|
|
unsigned int loopdelay; // loop command param: delay in ms between 2 iterations
|
|
unsigned int phyprntbuff_size; // for phy module, dump_eNB_stats function buffer size
|
|
} telnetsrv_params_t;
|
|
|
|
|
|
typedef void(*settelnetmodule_t)(char *name, void *ptr);
|
|
|
|
/*-------------------------------------------------------------------------------------------*/
|
|
/*
|
|
VT escape sequence definition, for smarter display....
|
|
*/
|
|
|
|
#define ESC "\x1b"
|
|
#define CSI "\x1b["
|
|
#define BOLD "\x1b[1m"
|
|
#define RED "\x1b[31m"
|
|
#define GREEN "\x1b[32m"
|
|
#define BLUE "\x1b[34m"
|
|
#define MAGENTA "\x1b[35m"
|
|
#define CYAN "\x1b[36m"
|
|
#define STDFMT "\x1b[0m"
|
|
|
|
/*---------------------------------------------------------------------------------------------*/
|
|
#define NICE_MAX 19
|
|
#define NICE_MIN -20
|
|
#define TELNET_ADDCMD_FNAME "add_telnetcmd"
|
|
#define TELNET_POLLCMDQ_FNAME "poll_telnetcmdq"
|
|
#define TELNET_PUSHCMD_FNAME "telnet_pushcmd"
|
|
typedef int(*add_telnetcmd_func_t)(const char *, telnetshell_vardef_t *, telnetshell_cmddef_t *);
|
|
typedef void(*poll_telnetcmdq_func_t)(void *qid,void *arg);
|
|
typedef void (*push_telnetcmd_func_t)(telnetshell_cmddef_t *cmd, char *cmdbuff, telnet_printfunc_t prnt);
|
|
#ifdef TELNETSERVERCODE
|
|
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd);
|
|
void set_sched(pthread_t tid, int pid,int priority);
|
|
void set_affinity(pthread_t tid, int pid, int coreid);
|
|
extern int get_phybsize(void);
|
|
#endif
|
|
#ifdef WEBSERVERCODE
|
|
extern void telnet_pushcmd(telnetshell_cmddef_t *cmd, char *cmdbuff, telnet_printfunc_t prnt);
|
|
extern telnetsrv_params_t *get_telnetsrv_params(void);
|
|
extern char *telnet_getvarvalue(telnetshell_vardef_t *var, int varindex);
|
|
extern int telnet_setvarvalue(telnetshell_vardef_t *var, char *strval, telnet_printfunc_t prnt);
|
|
extern void telnetsrv_freetbldata(webdatadef_t *wdata);
|
|
#endif
|
|
#endif
|