Back to home page

Enduro/X

 
 

    


0001 /**
0002  * @brief xadmin tooling header file
0003  *
0004  * @file ndrx.h
0005  */
0006 /* -----------------------------------------------------------------------------
0007  * Enduro/X Middleware Platform for Distributed Transaction Processing
0008  * Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0009  * Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0010  * This software is released under one of the following licenses:
0011  * AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0012  * See LICENSE file for full text.
0013  * -----------------------------------------------------------------------------
0014  * AGPL license:
0015  *
0016  * This program is free software; you can redistribute it and/or modify it under
0017  * the terms of the GNU Affero General Public License, version 3 as published
0018  * by the Free Software Foundation;
0019  *
0020  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0021  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0022  * PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0023  * for more details.
0024  *
0025  * You should have received a copy of the GNU Affero General Public License along 
0026  * with this program; if not, write to the Free Software Foundation, Inc.,
0027  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0028  *
0029  * -----------------------------------------------------------------------------
0030  * A commercial use license is available from Mavimax, Ltd
0031  * contact@mavimax.com
0032  * -----------------------------------------------------------------------------
0033  */
0034 
0035 #ifndef NDRX_H
0036 #define NDRX_H
0037 
0038 #ifdef  __cplusplus
0039 extern "C" {
0040 #endif
0041 
0042 /*---------------------------Includes-----------------------------------*/
0043 #include <sys/param.h>
0044 #include <atmi.h>
0045 #include <sys_mqueue.h>
0046 #include <signal.h>
0047 #include <linenoise.h>
0048     
0049 #include <ndrxdcmn.h>
0050 #include <gencall.h>
0051 #include <inicfg.h>
0052     
0053 #ifndef NDRX_DISABLEPSCRIPT
0054 #include <pscript.h>
0055 #endif
0056 
0057 /*---------------------------Externs------------------------------------*/
0058 #define         MAX_ARGS        20
0059     
0060 #define         CMD_MAX         PATH_MAX
0061 #define         MAX_ARG_LEN     500
0062 #define         ARG_DEILIM      " \t"
0063 #define         MAX_CMD_LEN     300
0064     
0065 #define         NDRX_XADMIN_IDLEREQ         1   /**< Idle requested           */
0066 #define         NDRX_XADMIN_RPLYQREQ        2   /**< Reply queue requested    */
0067 
0068 extern int G_cmd_argc_logical;
0069 extern int G_cmd_argc_raw;
0070 extern char *G_cmd_argv[MAX_ARGS];
0071 /*---------------------------Macros-------------------------------------*/
0072 #define     NDRXD_STAT_NOT_STARTED           0
0073 #define     NDRXD_STAT_MALFUNCTION           1
0074 #define     NDRXD_STAT_RUNNING               2
0075 
0076     
0077 #define FIX_SVC_NM(Xsrc, Xbuf, Xlen) \
0078         if (strlen(Xsrc) > Xlen)\
0079         {\
0080             strncpy(Xbuf, Xsrc, Xlen-1);\
0081             Xbuf[Xlen-1] = '+';\
0082             Xbuf[Xlen] = EXEOS;\
0083         }\
0084         else\
0085             strcpy(Xbuf, Xsrc);
0086 
0087 #define FIX_SVC_NM_DIRECT(Xbuf, Xlen) \
0088         if (strlen(Xbuf) > Xlen)\
0089         {\
0090             Xbuf[Xlen-1] = '+';\
0091             Xbuf[Xlen] = EXEOS;\
0092         }
0093 
0094 #define XADMIN_INVALID_OPTIONS_MSG      "Invalid options, see `help'.\n"
0095 /*---------------------------Enums--------------------------------------*/
0096 /*---------------------------Typedefs-----------------------------------*/
0097 /**
0098  * EnduroX command line utility config
0099  */
0100 typedef struct ndrx_config
0101 {
0102     char pid_file[PATH_MAX];               /**< PID file               */
0103     mqd_t ndrxd_q;                         /**< Queue to admin process */
0104     char ndrxd_q_str[NDRX_MAX_Q_SIZE+1];   /**< Queue to admin process */
0105     char *qprefix;                         /**< Global queue prefix    */
0106     char *qpath;                           /**< Global qpath prefix    */
0107 
0108     /* Reply queue (opened on admin utility startup) */
0109     mqd_t reply_queue;                     /**< Queue on which we wait reply */
0110     char reply_queue_str[NDRX_MAX_Q_SIZE+1]; /**< Reply queue (string)       */
0111 
0112     /* Runtime status: */
0113     int  ndrxd_stat;                       /**< Back-end status        */
0114     short is_idle;                         /**< Are we idle?           */
0115     char *ndrxd_logfile;                   /**< Log filename for ndrxd */
0116     long listcall_flags;                   /**< flags used by list call*/
0117     
0118     key_t ipckey;                          /**< IPC Key used by Enduor/X */
0119 } ndrx_config_t;
0120 
0121 
0122 /* Command mapping */
0123 typedef struct cmd_mapping cmd_mapping_t;       /* Type defintion used in callbacks */
0124 struct cmd_mapping
0125 {
0126     char *cmd;          /* Command name */
0127     /* command callback */
0128     int (*p_exec_command) (cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0129     int ndrxd_cmd;             /**< EnduroX Daemon command code          */
0130     int has_args;              /**< Does command has arguments?          */
0131     /**
0132      * Do we need ndrxd in idle?
0133      * 0 = no idle needed, no reply queue needed
0134      * 1 = need idle (also reply queue is open)
0135      * 2 = no need for idle, but reply queue is needed)
0136      */
0137     int reqidle;               
0138     char *help;                /**< Short help descr of command          */
0139     int (*p_add_help) (void);   /**< additional help function             */
0140 };
0141 /*---------------------------Globals------------------------------------*/
0142 extern ndrx_config_t G_config;
0143 extern gencall_args_t G_call_args[];
0144 extern ndrx_inicfg_section_keyval_t *G_xadmin_config;
0145 extern char G_xadmin_config_file[PATH_MAX+1];
0146 /*---------------------------Statics------------------------------------*/
0147 /*---------------------------Prototypes---------------------------------*/
0148 extern int start_daemon_idle(void);
0149 extern int load_env_config(void);
0150 extern int ndrx_xadmin_open_rply_q(void);
0151 extern int is_ndrxd_running(pid_t *p_pid, int silent);
0152 extern void simple_output(char *buf);
0153 /* extern int get_arg(char *param, int argc, char **argv, char **out); */
0154 extern int chk_confirm_clopt(char *message, int argc, char **argv);
0155 extern char * ndrx_xadmin_nodeid(void);
0156 extern int ndrx_start_idle();
0157 extern int ndrx_xadmin_shm_close();
0158 extern int un_init(int closeshm);
0159 extern void sign_chld_handler(int sig);
0160 
0161 extern int process_command_buffer(int *p_have_next);
0162 
0163 #ifndef NDRX_DISABLEPSCRIPT
0164 extern void printfunc(HPSCRIPTVM v,const PSChar *s,...);
0165 extern void errorfunc(HPSCRIPTVM v,const PSChar *s,...);
0166 extern int load_value(HPSCRIPTVM v, char *key_val_string);
0167 extern int add_defaults_from_config(HPSCRIPTVM v, char *section);
0168 extern int register_getExfields(HPSCRIPTVM v);
0169 
0170 #endif
0171 
0172 extern int cmd_ldcf(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0173 extern int cmd_start(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0174 extern int cmd_stop(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0175 extern int cmd_sreload(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0176 /* start stop process: */
0177 extern int ss_rsp_process(command_reply_t *reply, size_t reply_len);
0178 extern int cmd_psc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0179 extern int psc_rsp_process(command_reply_t *reply, size_t reply_len);
0180 extern int cmd_fdown(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0181 extern int cmd_udown(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0182 extern int cmd_cat(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0183 extern int at_rsp_process(command_reply_t *reply, size_t reply_len);
0184 extern int cmd_reload(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0185 extern int cmd_testcfg(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0186 extern int reload_rsp_process(command_reply_t *reply, size_t reply_len);
0187 extern int cmd_r(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0188 extern int cmd_cabort(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0189 /*Adv & unadv*/
0190 extern int cmd_unadv(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0191 /*readv: */
0192 extern int cmd_readv(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0193 
0194 /*ppm:*/
0195 extern int cmd_ppm(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0196 extern int ppm_rsp_process(command_reply_t *reply, size_t reply_len);
0197 
0198 /* shm: */
0199 extern int shm_psrv_rsp_process(command_reply_t *reply, size_t reply_len);
0200 extern int cmd_shm_psrv(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0201     
0202 extern int shm_psvc_rsp_process(command_reply_t *reply, size_t reply_len);    
0203 extern int cmd_shm_psvc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0204 
0205 /* queues */
0206 extern int pq_rsp_process(command_reply_t *reply, size_t reply_len);
0207 extern int cmd_pq(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0208 extern int cmd_pqa(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0209 
0210 /* Transactions */
0211 extern int cmd_pt(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0212 extern int cmd_abort(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0213 extern int cmd_commit(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0214 
0215 extern int cmd_recoverlocal(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0216 extern int cmd_commitlocal(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0217 extern int cmd_abortlocal(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0218 extern int cmd_forgetlocal(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0219 
0220 
0221 /* env: */
0222 extern int cmd_pe(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0223 extern int pe_rsp_process(command_reply_t *reply, size_t reply_len);
0224 extern int cmd_set(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0225 extern int cmd_unset(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0226 
0227 /* cpm: */
0228 extern int cmd_pc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0229 extern int cmd_sc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0230 extern int cmd_bc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0231 extern int cmd_rc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0232 
0233 
0234 /* persistent queues: */
0235 extern int cmd_mqlq(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0236 extern int cmd_mqlc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0237 extern int cmd_mqlm(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0238 extern int cmd_mqdm(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0239 extern int cmd_mqrc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0240 extern int cmd_mqch(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0241 extern int cmd_mqrm(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0242 extern int cmd_mqmv(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0243 
0244 extern int mqfilter(char *svcnm);
0245 extern int cmd_killall(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0246 
0247 /* posix queues: */
0248 extern int cmd_qrmall(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0249 extern int cmd_qrm(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0250 
0251 /* scripting: */
0252 extern int cmd_provision(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0253 
0254 /* gen: */
0255 extern int cmd_gen_load_scripts(void);
0256 extern int cmd_gen_help(void);
0257 extern int cmd_gen(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0258 
0259 /* cache:  */
0260 extern int cmd_cs(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0261 extern int cmd_cd(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0262 extern int cmd_ci(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0263 
0264 /* UBF Field Database: */
0265 extern int cmd_pubfdb(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0266 
0267 /* System V specifics */
0268 #if defined(EX_USE_SYSVQ) || defined(EX_USE_SVAPOLL)
0269 extern int cmd_svmaps(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0270 #endif
0271 
0272 extern int cmd_svqids(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0273 extern int cmd_svsemids(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0274 
0275 /* Utils: */
0276 extern int cmd_ps(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0277 
0278 /* appconfig: */
0279 extern int cmd_appconfig(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0280 extern int appconfig_rsp_process(command_reply_t *reply, size_t reply_len);
0281 
0282 /* dping: */
0283 extern int cmd_dping(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0284 extern int cmd_dsleep(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0285 extern int cmd_dpid(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0286 
0287 /* lcf: */
0288 extern int cmd_lcf_help(void);
0289 extern int cmd_lcf(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0290 extern int ndrx_xadmin_lcf_init(void);
0291 extern int cmd_lcf_completion(linenoiseCompletions *lc, char *buf);
0292 
0293 extern int cmd_shmcfg(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0294 extern int cmd_prtsvc(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0295 extern int cmd_psg(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0296 extern int cmd_mmon(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0297 extern int cmd_mmoff(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0298 
0299 /* TMIB: */
0300 extern int cmd_mibget(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next);
0301 
0302 
0303 extern void ndrx_tab_init(ndrx_growlist_t *table);
0304 extern int ndrx_tab_add_col(ndrx_growlist_t *table, int col_nr, char *str);
0305 extern void ndrx_tab_print(ndrx_growlist_t *table, ndrx_growlist_t *coltypes);
0306 extern void ndrx_tab_free(ndrx_growlist_t *table);
0307 
0308 
0309 #ifdef  __cplusplus
0310 }
0311 #endif
0312 
0313 #endif  /* NDRX_H */
0314 
0315 /* vim: set ts=4 sw=4 et smartindent: */