From: Jeffrey Altman Date: Sun, 2 Oct 2005 07:08:55 +0000 (+0000) Subject: STABLE14-windows-rxstats-20051001 X-Git-Tag: openafs-stable-1_4_0-rc6~13 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=df35acd30ea58d13ecebd2bf6c5b3b3789c0c60e;p=packages%2Fo%2Fopenafs.git STABLE14-windows-rxstats-20051001 Add interface to rxstats api (cherry picked from commit f3e2cdb5260e49d5335d37fdab909d360bbe7102) --- diff --git a/src/WINNT/afsd/NTMakefile b/src/WINNT/afsd/NTMakefile index 8361c5188..1f7dc1ae4 100644 --- a/src/WINNT/afsd/NTMakefile +++ b/src/WINNT/afsd/NTMakefile @@ -276,7 +276,8 @@ install_headers: $(IDLFILES) $(INCFILES) install: install_headers install_objs $(CONF_DLLFILE) \ $(EXEDIR)\klog.exe \ $(EXEDIR)\tokens.exe \ - $(EXEDIR)\unlog.exe $(EXEDIR)\afsd.exe $(EXEDIR)\afsd_service.exe \ + $(EXEDIR)\unlog.exe \ + $(EXEDIR)\afsd_service.exe \ $(EXEDIR)\fs.exe \ $(EXEDIR)\symlink.exe \ $(EXEDIR)\afsdacl.exe \ @@ -287,7 +288,7 @@ install: install_headers install_objs $(CONF_DLLFILE) \ install9X: install_headers $(CONF_DLLFILE) \ $(EXEDIR)\klog.exe \ $(EXEDIR)\tokens.exe \ - $(EXEDIR)\unlog.exe $(EXEDIR)\afsd_service.exe \ + $(EXEDIR)\unlog.exe $(EXEDIR)\afsd.exe $(EXEDIR)\afsd_service.exe \ $(EXEDIR)\fs.exe $(EXEDIR)\symlink.exe \ $(LOGON_DLLFILE) $(LOG95_DLLFILE) \ $(EXEDIR)\afsshare.exe \ @@ -380,7 +381,6 @@ AFSD_SDKLIBS =\ AFSD_EXELIBS =\ $(DESTDIR)\lib\libosi.lib \ $(DESTDIR)\lib\afsrpc.lib \ - $(DESTDIR)\lib\afsrx.lib \ $(DESTDIR)\lib\afsauthent.lib \ $(DESTDIR)\lib\afs\mtafsvldb.lib \ $(DESTDIR)\lib\afs\mtafsint.lib \ diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index 83e9d1e21..17073b915 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -536,6 +536,8 @@ int afsd_InitCM(char **reasonP) DWORD cacheSize; long logChunkSize; DWORD stats; + DWORD rx_enable_peer_stats = 0; + DWORD rx_enable_process_stats = 0; long traceBufSize; long maxcpus; long ltt, ltto; @@ -987,6 +989,24 @@ int afsd_InitCM(char **reasonP) if (rx_mtu != -1) afsi_log("RX maximum MTU is %d", rx_mtu); + dummyLen = sizeof(rx_enable_peer_stats); + code = RegQueryValueEx(parmKey, "RxEnablePeerStats", NULL, NULL, + (BYTE *) &rx_enable_peer_stats, &dummyLen); + if (code != ERROR_SUCCESS) { + rx_enable_peer_stats = 0; + } + if (rx_enable_peer_stats) + afsi_log("RX Peer Statistics gathering is enabled"); + + dummyLen = sizeof(rx_enable_process_stats); + code = RegQueryValueEx(parmKey, "RxEnableProcessStats", NULL, NULL, + (BYTE *) &rx_enable_process_stats, &dummyLen); + if (code != ERROR_SUCCESS) { + rx_enable_process_stats = 0; + } + if (rx_enable_process_stats) + afsi_log("RX Process Statistics gathering is enabled"); + dummyLen = sizeof(ConnDeadtimeout); code = RegQueryValueEx(parmKey, "ConnDeadTimeout", NULL, NULL, (BYTE *) &ConnDeadtimeout, &dummyLen); @@ -1123,6 +1143,12 @@ int afsd_InitCM(char **reasonP) rx_StartServer(0); afsi_log("rx_StartServer"); + if (rx_enable_peer_stats) + rx_enablePeerRPCStats(); + + if (rx_enable_process_stats) + rx_enableProcessRPCStats(); + code = cm_GetRootCellName(rootCellName); afsi_log("cm_GetRootCellName code %d, cm_freelanceEnabled= %d, rcn= %s", code, cm_freelanceEnabled, (code ? "" : rootCellName)); diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index 8f0ed439a..32d234faf 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -2367,6 +2367,49 @@ long cm_IoctlSetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp) return 0; } +long cm_IoctlRxStatProcess(struct smb_ioctl *ioctlp, struct cm_user *userp) +{ + afs_int32 flags; + int code = 0; + + memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_int32)); + if (!(flags & AFSCALL_RXSTATS_MASK) || (flags & ~AFSCALL_RXSTATS_MASK)) { + return -1; + } + if (flags & AFSCALL_RXSTATS_ENABLE) { + rx_enableProcessRPCStats(); + } + if (flags & AFSCALL_RXSTATS_DISABLE) { + rx_disableProcessRPCStats(); + } + if (flags & AFSCALL_RXSTATS_CLEAR) { + rx_clearProcessRPCStats(AFS_RX_STATS_CLEAR_ALL); + } + return 0; +} + +long cm_IoctlRxStatPeer(struct smb_ioctl *ioctlp, struct cm_user *userp) +{ + afs_int32 flags; + int code = 0; + + memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_int32)); + + if (!(flags & AFSCALL_RXSTATS_MASK) || (flags & ~AFSCALL_RXSTATS_MASK)) { + return -1; + } + if (flags & AFSCALL_RXSTATS_ENABLE) { + rx_enablePeerRPCStats(); + } + if (flags & AFSCALL_RXSTATS_DISABLE) { + rx_disablePeerRPCStats(); + } + if (flags & AFSCALL_RXSTATS_CLEAR) { + rx_clearPeerRPCStats(AFS_RX_STATS_CLEAR_ALL); + } + return 0; +} + #ifdef DJGPP extern int afsd_shutdown(int); extern int afs_shutdown; diff --git a/src/WINNT/afsd/cm_ioctl.h b/src/WINNT/afsd/cm_ioctl.h index e958bfbbb..bbc4f15ae 100644 --- a/src/WINNT/afsd/cm_ioctl.h +++ b/src/WINNT/afsd/cm_ioctl.h @@ -47,6 +47,13 @@ extern char * cm_sysName; extern unsigned int cm_sysNameCount; extern char * cm_sysNameList[MAXNUMSYSNAMES]; +/* flags for rxstats pioctl */ + +#define AFSCALL_RXSTATS_MASK 0x7 /* Valid flag bits */ +#define AFSCALL_RXSTATS_ENABLE 0x1 /* Enable RX stats */ +#define AFSCALL_RXSTATS_DISABLE 0x2 /* Disable RX stats */ +#define AFSCALL_RXSTATS_CLEAR 0x4 /* Clear RX stats */ + #ifndef __CM_IOCTL_INTERFACES_ONLY__ void cm_InitIoctl(void); @@ -144,6 +151,10 @@ extern long cm_IoctlFreemountAddCell(smb_ioctl_t *ioctlp, cm_user_t *userp); extern long cm_IoctlFreemountRemoveCell(smb_ioctl_t *ioctlp, cm_user_t *userp); extern long cm_IoctlMemoryDump(smb_ioctl_t *ioctlp, cm_user_t *userp); + +extern long cm_IoctlRxStatProcess(smb_ioctl_t *ioctlp, cm_user_t *userp); + +extern long cm_IoctlRxStatPeer(smb_ioctl_t *ioctlp, cm_user_t *userp); #endif /* __CM_IOCTL_INTERFACES_ONLY__ */ #endif /* __CM_IOCTL_H_ENV__ */ diff --git a/src/WINNT/afsd/fs.c b/src/WINNT/afsd/fs.c index 6516b4779..2af31c05c 100644 --- a/src/WINNT/afsd/fs.c +++ b/src/WINNT/afsd/fs.c @@ -4197,6 +4197,7 @@ FlushMountCmd(struct cmd_syndesc *as, char *arock) } return error; } +#endif /* WIN32 */ static int RxStatProcCmd(struct cmd_syndesc *as, char *arock) @@ -4267,7 +4268,6 @@ RxStatPeerCmd(struct cmd_syndesc *as, char *arock) return 0; } -#endif /* WIN32 */ #ifndef WIN32 #include "AFS_component_version_number.c" @@ -4521,7 +4521,6 @@ main(int argc, char **argv) ts = cmd_CreateSyntax("getcrypt", GetCryptCmd, 0, "get cache manager encryption flag"); -#ifndef WIN32 ts = cmd_CreateSyntax("rxstatproc", RxStatProcCmd, 0, "Manage per process RX statistics"); cmd_AddParm(ts, "-enable", CMD_FLAG, CMD_OPTIONAL, "Enable RX stats"); @@ -4534,6 +4533,7 @@ main(int argc, char **argv) cmd_AddParm(ts, "-disable", CMD_FLAG, CMD_OPTIONAL, "Disable RX stats"); cmd_AddParm(ts, "-clear", CMD_FLAG, CMD_OPTIONAL, "Clear RX stats"); +#ifndef WIN32 ts = cmd_CreateSyntax("setcbaddr", CallBackRxConnCmd, 0, "configure callback connection address"); cmd_AddParm(ts, "-addr", CMD_SINGLE, CMD_OPTIONAL, "host name or address"); #endif diff --git a/src/WINNT/afsd/smb_iocons.h b/src/WINNT/afsd/smb_iocons.h index 92ea42f9b..585bdc862 100644 --- a/src/WINNT/afsd/smb_iocons.h +++ b/src/WINNT/afsd/smb_iocons.h @@ -94,4 +94,6 @@ typedef struct cm_cacheParms { #define VIOC_FLUSHALL 0x2b #define VIOCGETFID 0x2c #define VIOCGETOWNER 0x2d +#define VIOC_RXSTAT_PROC 0x2e +#define VIOC_RXSTAT_PEER 0x2f #endif /* __SMB_IOCONS_H_ENV_ */ diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index 0f217baf4..072bb1fcc 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -81,6 +81,8 @@ void smb_InitIoctl(void) smb_ioctlProcsp[VIOC_FLUSHALL] = cm_IoctlFlushAllVolumes; smb_ioctlProcsp[VIOCGETFID] = cm_IoctlGetFid; smb_ioctlProcsp[VIOCGETOWNER] = cm_IoctlGetOwner; + smb_ioctlProcsp[VIOC_RXSTAT_PROC] = cm_IoctlRxStatProcess; + smb_ioctlProcsp[VIOC_RXSTAT_PEER] = cm_IoctlRxStatPeer; } /* called to make a fid structure into an IOCTL fid structure */