Back to home page

Enduro/X

 
 

    


0001 /**
0002  * @brief Enduro/X Standard library
0003  *
0004  * @file ndrstandard.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 #ifndef NDRSTANDARD_H
0035 #define NDRSTANDARD_H
0036 
0037 #ifdef  __cplusplus
0038 extern "C" {
0039 #endif
0040     
0041 #include <ndrx_config.h>
0042 #include <stdint.h>
0043 #include <limits.h>
0044 #include <string.h>
0045     
0046 #if EX_SIZEOF_VOIDPTR == 4
0047 
0048 /* 32-bit */
0049 #define SYS32BIT
0050 typedef long ndrx_longptr_t;
0051 #define NDRX_LONGPTR_HEX    "%lx"
0052 
0053 #elif EX_SIZEOF_VOIDPTR == 8
0054 
0055 #define SYS64BIT
0056 typedef long ndrx_longptr_t;
0057 #define NDRX_LONGPTR_HEX    "%lx"
0058 
0059 #else
0060 #error Cannot detect word size
0061 #endif
0062     
0063 #ifndef EXFAIL
0064 #define EXFAIL      -1
0065 #endif
0066     
0067 #ifndef EXSUCCEED
0068 #define EXSUCCEED       0
0069 #endif
0070 
0071 #ifndef expublic
0072 #define expublic
0073 #endif
0074     
0075 #ifndef exprivate
0076 #define exprivate       static
0077 #endif
0078 
0079 #ifndef EXEOS
0080 #define EXEOS             '\0'
0081 #endif
0082     
0083 #ifndef EXBYTE
0084 #define EXBYTE(x) ((x) & 0xff)
0085 #endif
0086 
0087 #ifndef EXFALSE
0088 #define EXFALSE        0
0089 #endif
0090 
0091 #ifndef EXTRUE
0092 #define EXTRUE         1
0093 #endif
0094 
0095 /** Directory separator symbol */
0096 #define EXDIRSEP      '/'
0097 
0098 #define N_DIM(a)        (sizeof(a)/sizeof(*(a)))
0099 
0100 #ifndef EXFAIL_OUT
0101 #define EXFAIL_OUT(X)    do {X=EXFAIL; goto out;} while (0)
0102 #endif
0103 
0104 #ifndef EXOFFSET
0105 #ifdef SYS64BIT
0106 #define EXOFFSET(STRUCT,ELM)   ((long) &(((STRUCT *)0)->ELM) )
0107 #else
0108 #define EXOFFSET(STRUCT,ELM)   ((const int) &(((STRUCT *)0)->ELM) )
0109 #endif
0110 #endif
0111     
0112 #define NDRX_WORD_SIZE  (int)sizeof(void *)*8
0113 
0114 #ifndef EXELEM_SIZE
0115 #define EXELEM_SIZE(STRUCT,ELM)        (sizeof(((STRUCT *)0)->ELM))
0116 #endif
0117 
0118 #define NDRX_MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
0119     
0120 #define NDRX_ATMI_MSG_MAX_SIZE   65536 /* internal */
0121     
0122 #define NDRX_STACK_MSG_FACTOR        30 /** max number of messages in stack, not used */
0123 
0124 /** Default stack size if main is unlimited*/
0125 #define NDRX_STACK_MAX (8192*1024)
0126 /* Feature #127 
0127  * Allow dynamic buffer sizing with Variable Length Arrays (VLS) in C99
0128  */
0129 extern NDRX_API long ndrx_msgsizemax (void);
0130 #define NDRX_MSGSIZEMAX          ndrx_msgsizemax()
0131 
0132 /**
0133  * Overhead applied to max buffer size used during the transport / 
0134  * encapsulation structures.
0135  */
0136 #define NDRX_MSGSIZEMAX_OVERHD   200
0137 
0138 #define NDRX_PADDING_MAX         16 /* Max compiled padding in struct (assumed) */
0139 
0140 #ifdef HAVE_STRNLEN
0141 
0142 #define NDRX_STRNLEN strnlen
0143 
0144 #else
0145 
0146 extern NDRX_API size_t ndrx_strnlen(char *str, size_t max);
0147 
0148 #define NDRX_STRNLEN ndrx_strnlen
0149 
0150 #endif
0151     
0152 #ifdef HAVE_STRLCPY
0153 #define NDRX_STRCPY_SAFE(X, Y) strlcpy(X, Y, sizeof(X));
0154     
0155 #define NDRX_STRCPY_SAFE_DST(X, Y, N) strlcpy(X, Y, N);
0156     
0157 #else
0158     
0159 /**
0160  * Copies string to maximum of target buffer size
0161  * @param X destination buffer (must be static char array with size sizeof available)
0162  * @param Y string to copy from
0163  */
0164 #define NDRX_STRCPY_SAFE(X, Y) do {\
0165     int ndrx_I5SmWDM_len = strlen(Y);\
0166     int ndrx_XgCmDEk_bufzs = sizeof(X)-1;\
0167     if (ndrx_I5SmWDM_len > ndrx_XgCmDEk_bufzs)\
0168     {\
0169             ndrx_I5SmWDM_len = ndrx_XgCmDEk_bufzs;\
0170     }\
0171     memcpy(X, Y, ndrx_I5SmWDM_len);\
0172     X[ndrx_I5SmWDM_len]=0;\
0173     } while(0)
0174     
0175 /**
0176  * Safe copy to target buffer (not overflowing it...)
0177  * N - buffer size of X 
0178  * This always copies EOS
0179  * @param X dest buffer
0180  * @param Y source buffer
0181  * @param N dest buffer size
0182  */ 
0183 #define NDRX_STRCPY_SAFE_DST(X, Y, N) do {\
0184     int ndrx_I5SmWDM_len = strlen(Y);\
0185     int ndrx_XgCmDEk_bufzs = (N)-1;\
0186     if (ndrx_I5SmWDM_len > ndrx_XgCmDEk_bufzs)\
0187     {\
0188         ndrx_I5SmWDM_len = ndrx_XgCmDEk_bufzs;\
0189     }\
0190     memcpy((X), (Y), ndrx_I5SmWDM_len);\
0191     (X)[ndrx_I5SmWDM_len]=0;\
0192     } while(0)
0193 #endif
0194 
0195 /**
0196  * This is compatible with strncpy()
0197  * Ensure that dest buffer does not go over. Does not ensure for EOS. If
0198  * possible it copies the EOS from source buffer.
0199  * @param X dest buffer
0200  * @param Y source buffer
0201  * @param N number of bytes in dest buffer.
0202  */
0203 #define NDRX_STRNCPY(X, Y, N) do {\
0204     int ndrx_I5SmWDM_len = strlen(Y)+1;\
0205     if (ndrx_I5SmWDM_len > (N))\
0206     {\
0207             ndrx_I5SmWDM_len = (N);\
0208     }\
0209     memcpy((X), (Y), ndrx_I5SmWDM_len);\
0210     } while(0)
0211 
0212 /**
0213  * Copy number of chars, ensure that string is terminated with EOS
0214  * Ensure that dest buffer does not go over. Ensure for EOS
0215  * @param X dest buffer
0216  * @param Y source buffer
0217  * @param N number chars to copy
0218  * @param S dest buffer size
0219  */
0220 #define NDRX_STRNCPY_EOS(X, Y, N, S) do {\
0221     int ndrx_I5SmWDM_len = strlen(Y);\
0222     if (ndrx_I5SmWDM_len > (N))\
0223     {\
0224             ndrx_I5SmWDM_len = (N);\
0225     }\
0226         if (ndrx_I5SmWDM_len>=(S)) ndrx_I5SmWDM_len=(S)-1;\
0227     memcpy((X), (Y), ndrx_I5SmWDM_len);\
0228         (X)[ndrx_I5SmWDM_len]=EXEOS;\
0229     } while(0)
0230 
0231 /**
0232  * Copy the maxing at source buffer, not checking the dest
0233  * N - number of symbols to test in source buffer.
0234  * The dest buffer is assumed to be large enough.
0235  * If result string is shorter than Y data and N allows additional data, then EOS is added
0236  */
0237 #define NDRX_STRNCPY_SRC(X, Y, N) do {\
0238         int ndrx_I5SmWDM_len = NDRX_STRNLEN((Y), (N));\
0239         if (ndrx_I5SmWDM_len < (N)) {ndrx_I5SmWDM_len++;}\
0240         memcpy((X), (Y), ndrx_I5SmWDM_len);\
0241     } while(0)
0242 
0243 /**
0244  * Copy last NRLAST_ chars from SRC_ to DEST_
0245  * safe mode with target buffer size checking.
0246  * @param DEST_ destination buffer where to copy the string (should be static def)
0247  * @param SRC_ source string to copy last bytes off
0248  * @param NRLAST_ number of bytes to copy from string to dest
0249  */
0250 #define NDRX_STRCPY_LAST_SAFE(DEST_, SRC_, NRLAST_) do {\
0251         int ndrx_KFWnP6Q_len = strlen(SRC_);\
0252         if (ndrx_KFWnP6Q_len > (NRLAST_)) {\
0253             NDRX_STRCPY_SAFE((DEST_), ((SRC_)+ (ndrx_KFWnP6Q_len - (NRLAST_))) );\
0254         } else {\
0255             NDRX_STRCPY_SAFE((DEST_), (SRC_));\
0256         }\
0257     } while(0)
0258 
0259 #ifdef EX_HAVE_STRCAT_S
0260 
0261 #define NDRX_STRCAT_S(DEST_, DEST_SIZE_, SRC_) strcat_s(DEST_, DEST_SIZE_, SRC_)
0262 
0263 #else
0264 
0265 /**
0266  * Cat string at the end. Dest size of the string is given
0267  * @param DEST_ dest buffer
0268  * @param DEST_SIZE_ dest buffer size
0269  * @param SRC_ source buffer to copy
0270  */
0271 #define NDRX_STRCAT_S(DEST_, DEST_SIZE_, SRC_) do {\
0272         int ndrx_VeIlgbK9tx_len = strlen(DEST_);\
0273         NDRX_STRCPY_SAFE_DST( (DEST_+ndrx_VeIlgbK9tx_len), SRC_, (DEST_SIZE_ - ndrx_VeIlgbK9tx_len));\
0274 } while(0)
0275 #endif
0276 
0277 /*
0278  * So we use these two macros where we need know that more times they will be
0279  * true, than false. This makes some boost for CPU code branching.
0280  * 
0281  * So for example if expect that some variable (c) must not be NULL
0282  * then we could run NDRX_UNLIKELY(NDRX_UNLIKELY).
0283  * This is useful for error handling, because mostly we do not have errors like
0284  * malloc fail etc..
0285  * Seems on xlC,on C++ __builtin_expect does not work
0286  */
0287 #if (!defined(__cplusplus) && defined(HAVE_EXPECT)) || (defined(__cplusplus) && defined(HAVE_EXPECT_CXX))
0288 
0289 #define NDRX_LIKELY(x)      __builtin_expect(!!(x), 1)
0290 #define NDRX_UNLIKELY(x)    __builtin_expect(!!(x), 0)
0291 
0292 #else
0293 
0294 /*
0295  * And this is fallback if we do not have expect compiler option.
0296  */
0297 #define NDRX_LIKELY(x)      (x)
0298 #define NDRX_UNLIKELY(x)    (x)
0299 
0300 #endif
0301 
0302 #define NDRX_DIR_PERM 0775  /**< user and group have write perm, use umask to limit */
0303 #define NDRX_COM_SVQ_PRIV   999 /**< This is private command id use by system v */
0304 
0305 /**
0306  * globals
0307  */
0308 #define ATMI_MSG_MAX_SIZE   NDRX_MSGSIZEMAX
0309 #define NDRX_MAX_Q_SIZE     128
0310 #define NDRX_MAX_ID_SIZE    96      /**< pfx + binary name + server id + pid + nodeid */
0311 #define NDRX_MAX_KEY_SIZE   128     /**< Key size for random key                      */
0312 #define NDRX_QDIAG_MSG_SIZE 256     /**< Q diagnostic message size                    */
0313 
0314 /* Range for cluster ID's
0315  * Currently we allow 254 nodes.
0316  */
0317 #define CONF_NDRX_NODEID_MIN        1       /**< Min Node ID                    */
0318 #define CONF_NDRX_NODEID_COUNT      32      /*< Total count of cluster nodes    */
0319 /** Max Node ID */
0320 #define CONF_NDRX_NODEID_MAX        CONF_NDRX_NODEID_COUNT
0321 
0322 /* List of configuration environment variables */
0323 #define CONF_NDRX_TOUT           "NDRX_TOUT"
0324 #define CONF_NDRX_ULOG           "NDRX_ULOG"
0325 #define CONF_NDRX_QPREFIX        "NDRX_QPREFIX"
0326 #define CONF_NDRX_SVCMAX         "NDRX_SVCMAX"
0327 #define CONF_NDRX_SRVMAX         "NDRX_SRVMAX"
0328 
0329 #define CONF_NDRX_RTCRTMAX_DFLT   102400         /**< 100KB one buffer routing cirteria space */
0330 #define CONF_NDRX_RTCRTMAX       "NDRX_RTCRTMAX"
0331 #define CONF_NDRX_RTSVCMAX_DFLT   1000           /**< 1000 service slots for one buffer       */
0332 #define CONF_NDRX_RTSVCMAX       "NDRX_RTSVCMAX"
0333 
0334 #define CONF_NDRX_CLTMAX         "NDRX_CLTMAX"     /**< Max number of client, cpm */
0335 #define CONF_NDRX_CONFIG         "NDRX_CONFIG"
0336 #define CONF_NDRX_QPATH          "NDRX_QPATH"
0337 #define CONF_NDRX_SHMPATH        "NDRX_SHMPATH"
0338 #define CONF_NDRX_CMDWAIT        "NDRX_CMDWAIT"    /**< Command wait time */
0339 #define CONF_NDRX_DPID           "NDRX_DPID"       /**< PID file for backend-process */
0340 #define CONF_NDRX_DMNLOG         "NDRX_DMNLOG"     /**< Log file for backend process */
0341 #define CONF_NDRX_LOG            "NDRX_LOG"        /**< Log file for command line utilty */
0342 #define CONF_NDRX_RNDK           "NDRX_RNDK"       /**< Random key */
0343 #define CONF_NDRX_MSGMAX         "NDRX_MSGMAX"     /**< Posix queues, max msgs */
0344 #define CONF_NDRX_MSGSIZEMAX     "NDRX_MSGSIZEMAX" /**< Maximum size of message for posixq */
0345 #define CONF_NDRX_MSGQUEUESMAX   "NDRX_MSGQUEUESMAX"/**< Max number of Queues (for sysv)  */
0346 #define CONF_NDRX_SVQREADERSMAX  "NDRX_SVQREADERSMAX"/**< SysV Shared mem max readers (rwlck)  */
0347 #define CONF_NDRX_LCFREADERSMAX  "NDRX_LCFREADERSMAX"/**< SysV Shared mem max readers (rwlck)  */
0348 #define CONF_NDRX_LCFMAX         "NDRX_LCFMAX" /**< Max number of latent command framework commands  */
0349 #define CONF_NDRX_LCFCMDEXP      "NDRX_LCFCMDEXP"/**< LCF startup command expiry */
0350 #define CONF_NDRX_LCFNORUN       "NDRX_LCFNORUN" /**< Do not run LCF commands */
0351 #define CONF_NDRX_SANITY         "NDRX_SANITY"     /**< Time in seconds after which do sanity check for dead processes */
0352 #define CONF_NDRX_QPATH          "NDRX_QPATH"      /**< Path to place on fs where queues lives */
0353 #define CONF_NDRX_IPCKEY         "NDRX_IPCKEY"     /**< IPC Key for shared memory */
0354 #define CONF_NDRX_DQMAX          "NDRX_DQMAX"      /**< Internal NDRXD Q len (max msgs) */
0355 #define CONF_NDRX_NODEID         "NDRX_NODEID"     /**< Cluster Node Id */
0356 #define CONF_NDRX_LDBAL          "NDRX_LDBAL"      /**< Load balance, 0 = run locally, 100 = run on cluster */
0357 #define CONF_NDRX_CLUSTERISED    "NDRX_CLUSTERISED"/**< Do we run in clusterized environment? */
0358 /* thise we can override with env_over: */
0359 #define CONF_NDRX_XA_RES_ID      "NDRX_XA_RES_ID"   /**< XA Resource ID           */
0360 #define CONF_NDRX_XA_OPEN_STR    "NDRX_XA_OPEN_STR" /**< XA Open string           */
0361 #define CONF_NDRX_XA_CLOSE_STR   "NDRX_XA_CLOSE_STR"/**< XA Close string          */
0362 #define CONF_NDRX_XA_DRIVERLIB   "NDRX_XA_DRIVERLIB"/**< Enduro RM Library        */
0363 #define CONF_NDRX_XA_RMLIB       "NDRX_XA_RMLIB"    /**< RM library               */
0364 #define CONF_NDRX_XA_FLAGS       "NDRX_XA_FLAGS"    /**< Enduro/X Specific flags  */
0365 #define CONF_NDRX_XA_LAZY_INIT   "NDRX_XA_LAZY_INIT"/**< 0 - load libs on 
0366                                                       init, 1 - load at use     */
0367 #define CONF_NDRX_NRSEMS         "NDRX_NRSEMS"      /**< Number of semaphores used for
0368                                                        service shared memory (for poll() mode)*/
0369 #define CONF_NDRX_NRSEMS_DFLT    30                 /**< default number of semphoares  */
0370 #define CONF_NDRX_MAXSVCSRVS     "NDRX_MAXSVCSRVS"  /**< Max servers per service (only for poll() mode) */
0371 #define CONF_NDRX_MAXSVCSRVS_DFLT 30                /**< default for NDRX_MAXSVCSRVS param */
0372 #define CONF_NDRX_XADMIN_CONFIG  "NDRX_XADMIN_CONFIG" /**< Xadmin config file          */
0373 #define CONF_NDRX_DEBUG_CONF     "NDRX_DEBUG_CONF"  /**< debug config file              */
0374 #define CONF_NDRX_DEBUG_STR      "NDRX_DEBUG_STR"   /**< Inline debug setting, prio 1   */
0375 #define CONF_NDRX_PLUGINS        "NDRX_PLUGINS"     /**< list of plugins, ';' seperated */
0376 #define CONF_NDRX_SYSFLAGS       "NDRX_SYSFLAGS"    /**< Additional flags to process    */
0377 #define CONF_NDRX_SILENT         "NDRX_SILENT"      /**< Make xadmin silent             */
0378 #define CONF_NDRX_TESTMODE       "NDRX_TESTMODE"    /**< Is Enduro/X test mode enabled  */
0379 /** call/receive timeout for xadmin - override of NDRX_TOUT */
0380 #define CONF_NDRX_XADMINTOUT     "NDRX_XADMINTOUT" 
0381 /** Service process name */
0382 #define CONF_NDRX_SVPROCNAME     "NDRX_SVPROCNAME" 
0383 /** Service command line */
0384 #define CONF_NDRX_SVCLOPT        "NDRX_SVCLOPT" 
0385 /** Parent process PID of server process */
0386 #define CONF_NDRX_SVPPID         "NDRX_SVPPID" 
0387 /** Server ID */
0388 #define CONF_NDRX_SVSRVID        "NDRX_SVSRVID" 
0389 #define CONF_NDRX_DFLTLOG        "NDRX_DFLTLOG"        /**< Default logging output if none defined conf  */
0390 #define CONF_NDRX_RTGRP          "NDRX_RTGRP"          /**< Routing group                                */
0391 #define CONF_NDRX_PGMAX          "NDRX_PGMAX"          /**< Max number of process groups (incl singleton)*/
0392 #define CONF_NDRX_SGREFRESH      "NDRX_SGREFRESH"      /**< Expected maximum singleton-group refresh time*/
0393 #define CONF_NDRX_SGLOCKINC      "NDRX_SGLOCKINC"      /**< Counter increment for taking the lock        */
0394 #define CONF_NDRX_PROCGRP_NO     "NDRX_PROCGRP_NO"     /**< Process group number (if set)                */
0395 #define CONF_NDRX_PROCGRP_LP_NO  "NDRX_PROCGRP_LP_NO"  /**< Process group's lock provider                */
0396 #define CONF_NDRX_RESPAWN        "NDRX_RESPAWN"        /**< Gives hint to the process that it was rebooted*/
0397 
0398 /** 
0399  * pre-process variable for not using POLLEXCL flag for svapoll
0400  */
0401 #define CONF_NDRX_NOPOLLEXCL     "NDRX_NOPOLLEXCL"
0402 
0403 /** Number of attempts (with 1 sec sleep in between) to wait for ndrxd normal
0404  * state required by command
0405  */
0406 #define CONF_NDRX_NORMWAITMAX    "NDRX_NORMWAITMAX"
0407 /** Default for  NDRX_NORMWAITMAX */    
0408 #define CONF_NDRX_NORMWAITMAX_DLFT      60
0409     
0410 /** resource manager override file*/
0411 #define CONF_NDRX_RMFILE                "NDRX_RMFILE"
0412     
0413 /** Enduro/X MW home               */
0414 #define CONF_NDRX_HOME                  "NDRX_HOME"
0415     
0416 /** Feedback pool allocator options */
0417 #define CONF_NDRX_FPAOPTS               "NDRX_FPAOPTS"
0418     
0419 /** Stack size for new threads produced by Enduro/X in kilobytes */
0420 #define CONF_NDRX_THREADSTACKSIZE       "NDRX_THREADSTACKSIZE"
0421 
0422 /** Minimum number of dispatch threads for ATMI Server */
0423 #define CONF_NDRX_MINDISPATCHTHREADS    "NDRX_MINDISPATCHTHREADS"
0424 
0425 /** Maximum number of dispatch threads for ATMI Server (not used currently) */
0426 #define CONF_NDRX_MAXDISPATCHTHREADS    "NDRX_MAXDISPATCHTHREADS"
0427 
0428 /** Used by System-V tout thread -> sleep period between timeout-scans    
0429  * in milli-seconds. Default is 1000.
0430  */
0431 #define CONF_NDRX_SCANUNIT              "NDRX_SCANUNIT"
0432 #define CONF_NDRX_SCANUNIT_DFLT         1000
0433 #define CONF_NDRX_SCANUNIT_MIN          1
0434 
0435 #define CONF_NDRX_APIFLAGS     "NDRX_APIFLAGS"  /**< API configuration flags */
0436 
0437 #define CONF_VIEWFILES  "VIEWFILES"         /* List of view files to load      */
0438 #define CONF_VIEWDIR    "VIEWDIR"           /* Folders with view files stored, ':' - sep   */
0439 
0440 #define CONF_FLDTBLDIR  "FLDTBLDIR"
0441 #define CONF_FIELDTBLS  "FIELDTBLS"
0442 #define NDRX_CMDLINE_SEP        " \t\n" /**< command line seperators          */
0443 #define NDRX_CMDLINE_QUOTES     "'\""   /**< Block quotes for non splitting   */
0444 
0445 #define NDRX_ARGS_YES           "yY"    /**< Confirm                          */
0446 #define NDRX_ARGS_NO            "nN"    /**< Reject                           */
0447 
0448 /**
0449  * Posix Queue processing path prefixes
0450  */
0451 #define NDRX_FMT_SEP      ','                   /**< Seperator in qnames      */
0452 #define NDRX_FMT_SEP_STR  ","                   /**< Seperator in qnames      */
0453 #define NDRX_NDRXD        "%s,sys,bg,ndrxd"
0454 #define NDRX_QTYPE_NDRXD    1                   /**< ndrxd backend q          */
0455 #define NDRX_NDRXCLT      "%s,sys,bg,xadmin,%d"
0456 #define NDRX_NDRXCLT_PFX  "%s,sys,bg,xadmin,"   /**< Prefix for sanity check    */
0457 
0458 
0459 #define NDRX_SVC_QFMT     "%s,svc,%s"            /**< Q format in epoll mode (one q multiple servers) */
0460 #define NDRX_SVC_QFMT_PFX "%s,svc,"              /**< Service Q prefix */
0461 #define NDRX_QTYPE_SVC      2                    /**< Service Q */
0462 #define NDRX_SVC_QFMT_SRVID "%s,svc,%s,%d"       /**< Q format in poll mode (use server id) */
0463 #define NDRX_ADMIN_FMT    "%s,srv,admin,%s,%d,%d"
0464 
0465 #define NDRX_SYS_SVC_PFX          "@"                    /**< Prefix used for system services */
0466 #define NDRX_SYS_SVC_PFXC         '@'                    /**< Prefix used for system services */
0467 #define NDRX_SVC_BRIDGE_STATLEN   9                      /**< Static len of bridge name       */
0468 #define NDRX_SVC_BRIDGE           "@TPBRIDGE%03d"        /**< Bridge service format           */
0469 #define NDRX_SVC_QBRDIGE          "%s,svc,@TPBRIDGE%03d" /**< Bridge service Q format         */
0470     
0471 #define NDRX_SVC_TPBROAD  "@TPBRDCST%03ld"      /**< notify/broadcast remote dispatcher       */
0472 #define NDRX_SVC_TMIB     ".TMIB"               /**< Tp Management information base           */
0473 #define NDRX_SVC_TMIBNODE ".TMIB-%ld"         /**< Tp Management information base, node */
0474 #define NDRX_SVC_TMIBNODESV ".TMIB-%ld-%d"        /**< Tp Management information base, node, server */
0475 
0476 #define NDRX_SVC_RM       "@TM-%d"              /**< resource_id */
0477 #define NDRX_SVC_TM       "@TM-%d-%d"           /**< Node_idresource_id */
0478 #define NDRX_SVC_TM_I     "@TM-%d-%d-%d"        /**< Node_id,resource_id,instance/srvid */
0479     
0480 #define NDRX_SVC_TMQ      "@TMQ-%ld-%d"         /**< Node_id,srvid */
0481 /* QSPACE service format */
0482 #define NDRX_SVC_QSPACE   "@QSP%s"              /**< Q space format string (for service) */
0483     
0484 #define NDRX_SVC_CPM      "@CPMSVC"             /**< Client Process Monitor svc */
0485     
0486 #define NDRX_SVC_CCONF    "@CCONF"              /**< Common-config server */
0487 #define NDRX_SVC_ADMIN    "@ADMINSVC"           /**< Admin service for atmiservices, logical */
0488 #define NDRX_SVC_REPLY    "@REPLYSVC"           /**< Reply service for atmiservices, logical */
0489 
0490 #define NDRX_SVC_SGLOC      "@SGLOC-%ld-%d"         /**< singleton grp local checks */
0491 #define NDRX_SVC_SGREM      "@SGREM-%ld-%d"         /**< singleton grp remote checks */
0492 
0493 #define NDRX_ADMIN_FMT_PFX "%s,srv,admin,"      /**< Prefix for sanity check. */
0494 #define NDRX_QTYPE_SRVADM   3                   /**< Server Admin Q */
0495     
0496 #define NDRX_SVR_QREPLY   "%s,srv,reply,%s,%d,%d" /**< qpfx, procname, serverid, pid */
0497 #define NDRX_SVR_QREPLY_PFX "%s,srv,reply," /**< Prefix for sanity check. */
0498 #define NDRX_QTYPE_SRVRPLY  4                   /**< Server Reply Q */
0499     
0500 /* Used for System V interface */
0501 #define NDRX_SVR_SVADDR_FMT "%s,srv,addr,%s,%d" /**< Server address, per proc */
0502 #define NDRX_SVR_RQADDR_FMT "%s,srv,rqaddr,%s" /**< Server request address   */
0503 /** bridge request addr */
0504 #define NDRX_SVR_RQADDR_BRDG "%s,srv,rqaddr,@TPBRIDGE%03d"
0505 
0506 /* this may end up in "112233-" if client is not properly initialised */
0507 /* NOTE: Myid contains also node_id, the client Q does not contain it
0508  * as it is local
0509  */
0510 #define NDRX_CLT_QREPLY   "%s,clt,reply,%s,%d,%ld" /**< pfx, name, pid, context id*/
0511 /* client rply q parse  */
0512 #define NDRX_CLT_QREPLY_PARSE "%s clt reply %s %d %ld" /**< pfx, name, pid, context_id*/
0513     
0514 #define NDRX_CLT_QREPLY_PFX   "%s,clt,reply," /**< Prefix for sanity check */
0515 #define NDRX_QTYPE_CLTRPLY  5                   /**< Client Reply Q */
0516 #define NDRX_CLT_QREPLY_CHK   ",clt,reply," /**< (verify that it is reply q) */
0517 
0518 #define NDRX_ADMIN_SVC     "%s-%d"
0519 
0520 /* This queue basically links two process IDs for conversation */
0521 #define NDRX_CONV_INITATOR_Q  "%s,cnv,c,%s,%d" /**< Conversation initiator */
0522 #define NDRX_CONV_INITATOR_Q_PFX "%s,cnv,c," /**< Prefix for sanity check. */
0523 #define NDRX_QTYPE_CONVINIT 6                   /**< Conv initiator Q */
0524 #define NDRX_CONV_SRV_Q       "%s,cnv,s,%s,%d,%s" /**< Conversation server Q */
0525 #define NDRX_CONV_SRV_Q_PFX "%s,cnv,s," /**< Prefix for sanity check. */
0526 #define NDRX_QTYPE_CONVSRVQ 7                   /**< Conv server Q */
0527 
0528 /** binary name, server id, pid, contextid, nodeid */
0529 #define NDRX_MY_ID_SRV        "srv,%s,%d,%d,%ld,%d"
0530 /** binary name, server id, pid, contextid, nodeid for parse */
0531 #define NDRX_MY_ID_SRV_PARSE  "srv %s %d %d %ld %d"
0532 #define NDRX_MY_ID_SRV_NRSEPS  5 /**< Number of separators in myid of server */
0533     
0534 /** binary name, server id, pid, contextid, nodeid, cd for parse */
0535 #define NDRX_MY_ID_SRV_CNV_PARSE  "srv %s %d %d %ld %d %d"
0536 #define NDRX_MY_ID_SRV_CNV_NRSEPS  6 /**< Number of separators in myid of server */
0537     
0538 #define NDRX_MY_ID_CLT        "clt,%s,%d,%ld,%d" /**< cltname, pid, contextid, nodeid */
0539 #define NDRX_MY_ID_CLT_PARSE  "clt %s %d %ld %d" /**< cltname, pid, contextid, nodeid */
0540 #define NDRX_MY_ID_CLT_NRSEPS  4 /**< Number of separators in myid of client */
0541     
0542 #define NDRX_MY_ID_CLT_CNV_PARSE  "clt %s %d %ld %d %d" /**< cltname, pid, contextid, nodeid, cd */
0543 #define NDRX_MY_ID_CLT_CNV_NRSEPS  5 /**< Number of separators in myid of client */
0544 
0545 /* Shared memory formats */
0546 #define NDRX_SHM_SRVINFO_SFX    "shm,srvinfo"       /**< Server info SHM               */
0547 #define NDRX_SHM_SRVINFO        "%s," NDRX_SHM_SRVINFO_SFX
0548 #define NDRX_SHM_SRVINFO_KEYOFSZ 0                  /**< IPC Key offset                */
0549 
0550 #define NDRX_SHM_SVCINFO_SFX    "shm,svcinfo"       /**< Service info SHM              */
0551 #define NDRX_SHM_SVCINFO        "%s," NDRX_SHM_SVCINFO_SFX
0552 #define NDRX_SHM_SVCINFO_KEYOFSZ 1                  /**< IPC Key offset                */
0553     
0554 #define NDRX_SHM_BRINFO_SFX     "shm,brinfo"        /**< Bridge info SHM               */
0555 #define NDRX_SHM_BRINFO         "%s," NDRX_SHM_BRINFO_SFX
0556 #define NDRX_SHM_BRINFO_KEYOFSZ 2                   /**< IPC Key offset                */
0557     
0558 #define NDRX_SHM_P2S_SFX        "shm,p2s"           /**< Posix to System V             */
0559 #define NDRX_SHM_P2S            "%s," NDRX_SHM_P2S_SFX
0560 #define NDRX_SHM_P2S_KEYOFSZ    3                   /**< IPC Key offset                */
0561     
0562 #define NDRX_SHM_S2P_SFX        "shm,s2p"           /**< System V to Posix             */
0563 #define NDRX_SHM_S2P            "%s," NDRX_SHM_S2P_SFX
0564 #define NDRX_SHM_S2P_KEYOFSZ    4                   /**< IPC Key offset                */
0565 
0566 #define NDRX_SHM_CPM_SFX        "shm,cpm"           /**< Client process monitor        */
0567 #define NDRX_SHM_CPM            "%s," NDRX_SHM_CPM_SFX
0568 #define NDRX_SHM_CPM_KEYOFSZ    5                   /**< IPC Key offset                */
0569 
0570 #define NDRX_SHM_LCF_SFX        "shm,lcf"           /**< Latent command framework shm  */
0571 #define NDRX_SHM_LCF            "%s," NDRX_SHM_LCF_SFX
0572 #define NDRX_SHM_LCF_KEYOFSZ    6                   /**< IPC Key offset                */
0573 
0574 #define NDRX_SHM_ROUTCRIT_SFX   "shm,routcrit"      /**< Routing criteria              */
0575 #define NDRX_SHM_ROUTCRIT        "%s," NDRX_SHM_ROUTCRIT_SFX
0576 #define NDRX_SHM_ROUTCRIT_KEYOFSZ   7                 /**< IPC Key offset                */
0577     
0578 #define NDRX_SHM_ROUTSVC_SFX     "shm,routsvc"        /**< Routing services              */
0579 #define NDRX_SHM_ROUTSVC         "%s," NDRX_SHM_ROUTSVC_SFX
0580 #define NDRX_SHM_ROUTSVC_KEYOFSZ    8                 /**< IPC Key offset                */
0581     
0582 #define NDRX_SEM_SVCOP          "%s,sem,svcop"      /**< Service operations...         */
0583 
0584 #define NDRX_KEY_FMT            "-k %s"             /**< format string for process key */
0585 
0586 /* Format @C<P|D>NID/Flags/<Service name> */
0587 #define NDRX_CACHE_EV_PFXLEN    6                   /**< prefix len @CXNNN             */
0588 #define NDRX_CACHE_EV_PUT       "@CP%03d/%s/%s"     /**< Put data in cache, event      */
0589 #define NDRX_CACHE_EV_DEL       "@CD%03d/%s/%s"     /**< Delete data form cache, event */
0590 #define NDRX_CACHE_EV_KILL      "@CK%03d/%s/%s"     /**< Kill the database             */
0591 #define NDRX_CACHE_EV_MSKDEL    "@CM%03d/%s/%s"     /**< Delete by mask                */
0592 #define NDRX_CACHE_EV_KEYDEL    "@CE%03d/%s/%s"     /**< Delete by key                 */
0593 #define NDRX_CACHE_EVSVC        "@CACHEEV%03ld"     /**< Cache event service, delete   */
0594 #define NDRX_CACHE_MGSVC        "@CACHEMG%03ld"     /**< Cache managemtn service       */
0595     
0596 #define NDRX_CACHE_EV_LEN       3                   /**< Number of chars in command    */
0597     
0598 #define NDRX_CACHE_EV_PUTCMD    "@CP"               /**< Put command in event          */
0599 #define NDRX_CACHE_EV_DELCMD    "@CD"               /**< Delete command in event       */
0600 #define NDRX_CACHE_EV_KILCMD    "@CK"               /**< Kill/drop ache event          */
0601 #define NDRX_CACHE_EV_MSKDELCMD "@CM"               /**< Delete data by mask, event    */
0602 #define NDRX_CACHE_EV_KEYDELCMD "@CE"               /**< Delete by key event           */
0603 
0604 #define NDRX_MSGPRIO_DEFAULT            50 /**< Default priority used by tpcall, tpreturn etc. */
0605 #define NDRX_MSGPRIO_MIN                1  /**< Minimum priority                               */
0606 #define NDRX_MSGPRIO_MAX                100 /**< Max priority                                  */
0607 #define NDRX_MSGPRIO_NOTIFY             60 /**< Notification is higher prio                    */
0608 
0609 
0610 #ifdef  __cplusplus
0611 }
0612 #endif
0613 
0614 #endif  /* NDRSTANDARD_H */
0615 
0616 /* vim: set ts=4 sw=4 et smartindent: */