#ifndef __INCLUDE_LIBRARY_COMAND_H # define __INCLUDE_LIBRARY_COMAND_H /* comand.h */ #define BUFFER_SIZE BUF_CMD_SIZ_BYT /* Taille des buffers input/output pour les */ /* messages. */ #define SIZE_CMD_BUFF BUFFER_SIZE - 7 * sizeof(short) /*------------------------ Macro definitions -------------------------------*/ /*---------- Pour entetes buffers commande et application ------------------*/ #define GETSEQ_HDR(H) (0x03030303 & (H)) #define GETLGR_HDR(H) ((H) >> 2 & 0x3f | (H) >> 4 & 0xfc0) #define GETNARG_HDR(H) GETLGR_HDR(H) #define GETLVL_HDR(H) ((H) >> 18 & 0x3f | (H) >> 20 & 0xfc0) #define MAKE_HDR(S,LVL,X) ((S) \ | (X) << 2 & 0xfc | (X) << 4 & 0xfc00 \ | (LVL) << 18 & 0xfc0000 | (LVL) << 20 & 0xfc000000) /* Format des requetes/reponses, longueurs structures et codes */ /* Codes des commandes serveur : */ #define COD_CMD_CTL -6 /* SRVCTL */ #define COD_CMD_CNX -5 /* SRVCNX */ #define COD_CMD_EXI -4 /* SRVEXI */ #define COD_CMD_ASS -3 /* SRVASS */ #define COD_CMD_ASN -2 /* SRVASN */ #define COD_CMD_DEA -1 /* SRVDEA */ #define COD_CMD_DAS 0 /* SRVDAS */ /* Les codes des fonctions service applicatif */ /* vont de 1 a n (n dependant du service */ /* applicatif). */ /* Codes des fonctions de service (srvctl) */ #define COD_CTL_PRT 0 /* Sortie de la sd du serveur */ #define COD_CTL_RESTART 1 /* Arret et Restart du serveur */ #define COD_CTL_ACT_RESTART 2 /* Arret et Restart du serveur s'il est actif (k_func a TRUE) */ #define COD_CTL_STOP 3 /* Arret du serveur (non fait) */ #define COD_CTL_CPU 4 /* Rend le type de CPU du serveur */ #define COD_CTL_ERRMSG 5 /* Rend le message d'erreur <--> status */ #define COD_CTL_DYNLOAD 6 /* Requete de chargement dynamique d'un partageable */ #define COD_CTL_STARTLOAD 7 /* Comme COD_CTL_DYNLOAD + Start_only ou multi-connection dans le process fils cree par Serpc */ #define COD_CTL_ETHADR 8 /* Permet de recuperer l'adresse Ethernet ou le systeme identification */ #define COD_CTL_DYNNOLOAD 9 /* Requete de chargement dynamique d'un partageable */ #define COD_CTL_STARTNOLOAD 10 /* Comme COD_CTL_DYNLOAD + Start_only ou multi-connection dans le process fils cree par Serpc */ /* Struct entete buffer application. Commence sur le 2eme long du buffer de commande. */ typedef struct _buf_acp BUF_ACP, *PBUF_ACP ; struct _buf_acp { unsigned int level ; int func ; unsigned int narg ; unsigned int arg[1] ; } ; typedef struct _cmd_buff CMD_BUFF, *PCMD_BUFF ; struct _cmd_buff { /* CMD_BUFF_OFF */ /* CMD_ARG_OFF = CMD_BUFF_OFF/4 */ /* Buffer commande/fonction SIZE_CMD_BUFF octets */ /* Buffer des arguments user */ /* SRVCNX/SRVASS : */ /* ACSRV --> SERVER : Node/Taskname Destinataire */ /* SERVR --> SERVER : Node/taskname Origine */ int siz_nod ; /* SIZ_NOD_OFF 12 */ /* Longueur node destinataire 4 octets */ char nam_nod[16] ; /* NAM_NOD_OFF 16 */ /* Nom node destinataire 16 octets */ int siz_tsk ; /* SIZ_TSK_OFF 32 */ /* Longueur task destinatrice 4 octets */ char nam_tsk[16] ; /* NAM_TSK_OFF 36 */ /* Nom task destinatrice 16 octets */ /* Node/Username/Pid Client : */ int siz_nod_org ; /* SIZ_NOD_ORG_OFF 52 */ /* Longueur node origine 4 octets */ char nam_nod_org[16] ; /* NAM_NOD_ORG_OFF 56 */ /* Nom node origine 16 octets */ int siz_usr_org ; /* SIZ_USR_ORG_OFF 72 */ /* Longueur Username origine 4 octets */ char nam_usr_org[16] ; /* NAM_USR_ORG_OFF 76 */ /* Username origine 16 octets */ int siz_pid_org ; /* SIZ_PID_ORG_OFF 92 */ /* 4 octets */ int val_pid_org ; /* VAL_PID_ORG_OFF 96 */ int val_pid_org_ext ; /* Process identification PID 8 octets */ /* ACSRV --> SERVER : Protocole utilise (CNX) */ /* SERVR --> SERVER : Protocole a utiliser(ASS) */ int siz_ptc ; /* SIZ_PTC_OFF 104 */ /* 4 octets */ int val_ptc ; /* VAL_PTC_OFF 108 */ /* Protocole (DECNET/TCP-IP) 4 octets */ char dummy[SIZE_CMD_BUFF - 100] ; /* zone remplissage jusqu a SIZE_CMD_BUFF */ } ; typedef struct _buf BUF, *PBUF ; struct _buf { unsigned int lg_buff ; /* LG_BUFF_OFF 0 */ /* Longueur commande/reponse 4 octets */ /* LVL_OFF2 2 */ /* Level (apres la longueur ! ...) */ short lnkdest ; /* LNKDEST_OFF 4 */ /* Lnk destinataire 2 octets */ short lnkorg ; /* LNKORG_OFF 6 */ /* Lnk origine 2 octets */ short func ; /* FUNC_OFF 8 */ /* Index/numero de fonction 2 octets */ short numcmd ; /* NUMCMD_OFF 10 */ /* Numero de commande 2 octets */ CMD_BUFF cmd_buf ; } ; typedef struct _buf_rsp BUF_RSP, *PBUF_RSP ; struct _buf_rsp { unsigned int lg_buff ; /* LG_BUFF_OFF 0 %%%% */ /* Longueur commande/reponse 4 octets */ /* LVL_OFF 0 reference dans READ_CHAN */ /* Level (apres la longueur ! ...) */ /* LVL_OFF2 2 */ /* Level (apres la longueur ! ...) */ short lnkdest ; /* LNKDEST_OFF 4 */ /* Lnk destinataire 2 octets */ short lnkorg ; /* LNKORG_OFF 6 */ /* Lnk origine 2 octets */ short func ; /* FUNC_OFF 8 */ /* Index/numero de fonction 2 octets */ short numcmd ; /* NUMCMD_OFF 10 */ /* Numero de commande 2 octets */ STATUS status ; /* STATUS_OFF 12 */ /* Status 8 octets */ unsigned int rsp_buff[(BUFFER_SIZE - 20) / 4] ; /* RSP_BUFF_OFF 20 */ /* Buffer reponse Fonctions ? octets */ } ; /* Longueurs des commandes serveur : */ #define LG_CMD_SRV 12 /* Longueur entete des commandes/fonctions */ #define LG_CMD_CNX 112 /* Longueur commande SRVCNX */ #define LG_CMD_ASS 112 /* Longueur commande SRVASS */ #define LG_CMD_DEA 12 /* Longueur commande SRVDEA */ #define LG_CMD_EXI 12 /* Longueur commande SRVEXI */ #define LG_CMD_CTL 20 /* Longueur commande SRVCTL sans argument */ /* Longueurs des reponses serveur : */ #define LG_RSP_SRV 20 /* Longueur minimum reponse (avec status) */ #define LG_RSP_CNX 20 /* Longueur reponse SRVCNX */ #define LG_RSP_ASS 20 /* Longueur reponse SRVASS */ #define LG_RSP_DEA 20 /* Longueur reponse SRVDEA */ #define LG_RSP_EXI 20 /* Longueur reponse SRVEXI */ #define LG_RSP_CTL 20 /* Longueur reponse SRVCTL */ /* Longueur des arguments des commandes : */ #define LG_NOD 16 /* Nodes names */ #define HOSTNAMELEN 256 /* Nodes names (AccesServer-Unix-Domains) */ #define LG_TSK 80 /* Tasknames */ #define LG_USR 16 /* Usernames */ #define LG_PID 8 /* PID Process Identification */ #define LG_PID_DEC 4 /* 4 octets de PID sur VAX/VMS */ #define LG_PTC 4 /* Type de protocole (DECNET/TCP-IP) */ #define LVL_VAL0 0x1 /* Level des requetes ACSRV/serveur Macro */ #define LVL_VAL 0x2 /* Level des requetes ACSRV "C" */ /* Le serveur Macro sans NTD refuse ce level 1*/ /* Le serveur Macro+NTD accepte ces 2 levels*/ /* Le serveur C accepte ces 2 levels */ /* ACSRV "C" refuse le level 0 */ #define LVL_WRT_VAL 0x3 /* Level reponses serveurs Macro+NTD et C */ /* Type de format des requetes pour serveur */ /* Valeurs reelles des levels precedents */ /* cadres a droite */ #define SEQ_BYT_VAL 0x03020100 /* Ordre des octets (VAX) */ #define MSK_SEQ_BYT 0x03030303 /* Masque pour ordre des octets */ #define MSK_SEQ_BYT_VAL 0xFCFCFCFC /* Complement masque pour ordre des octets */ /* ; LVL : Protocol level entre Client/Serveur et Serveur/Serveur ; SEQ : Sequence des octets : pour tout ce qui n'est pas commande/reponse ; (Longueur, Level, Lnkdest, Lnkorg, Cmd/Func, ; Numcmd et Status pour la reponse) ; ARG : Nombre d'arguments du buffer de commande. Il comporte aussi la ; sequence des octets du buffer de commande qui peut etre differente ; de celle des informations acces_serveur/serveur. Et enfin il comporte ; le niveau de protocole applicatif (Structure des commandes/reponses ; et type de dialogue application/service applicatif). ; Actuellement, dans la protection, chaque valeur d'argument est ; precedee de son type et de sa longueur et le type de protocole ; applicatif est nul. ; La reponse generee par le service applicatif doit suivre l'ordre des ; octets de l'application cliente (cet ordre etant connu du service ; applicatif dans la commande). La reponse ne comporte donc pas d'ordre ; des octets. Si le type de protocole applicatif n'est pas compatible ; avec le service applicatif, ce dernier rend un status. Sinon, il ; traite la commande et fournit une reponse. Il n'y a donc pas dans la ; reponse de type de protocole. Actuellement, dans la protection, la ; reponse est constituee uniquement des valeurs sans nombre d'arguments. ; Il serait souhaitable qu'elle comporte nombre d'arguments et ; type/longueur de chaque argument avant sa valeur comme dans les ; commandes. */ #endif /* __INCLUDE_LIBRARY_COMAND_H */