From e039809c463de38fbfa939f83cb31ee2225788a8 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 22 Feb 2006 04:09:29 +0000 Subject: [PATCH] STABLE14-server-rxmaxmtu-option-20060221 add -rxmaxmtu to allow setting the max send and receive RX MTU size (cherry picked from commit 0ef21914dad5ddda3aba8ec3f3f894261edc5c08) --- src/bozo/bosserver.c | 21 +++++++++++++++++++++ src/ptserver/ptserver.c | 27 +++++++++++++++++++++++---- src/viced/viced.c | 18 ++++++++++++++++++ src/vlserver/vlserver.c | 20 ++++++++++++++++++++ src/volser/volmain.c | 19 +++++++++++++++++++ 5 files changed, 101 insertions(+), 4 deletions(-) diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c index bf39de5a2..48fdcf509 100644 --- a/src/bozo/bosserver.c +++ b/src/bozo/bosserver.c @@ -718,6 +718,7 @@ main(int argc, char **argv, char **envp) struct ktc_encryptionKey tkey; int i; char namebuf[AFSDIR_PATH_MAX]; + int rxMaxMTU = -1; #ifndef AFS_NT40_ENV int nofork = 0; struct stat sb; @@ -812,6 +813,20 @@ main(int argc, char **argv, char **envp) bozo_isrestricted = 1; } #endif + else if (!strcmp(argv[i], "-rxmaxmtu")) { + if ((i + 1) >= argc) { + fprintf(stderr, "missing argument for -rxmaxmtu\n"); + exit(1); + } + rxMaxMTU = atoi(argv[++i]); + if ((rxMaxMTU < RX_MIN_PACKET_SIZE) || + (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) { + printf("rxMaxMTU %d% invalid; must be between %d-%d\n", + rxMaxMTU, RX_MIN_PACKET_SIZE, + RX_MAX_PACKET_DATA_SIZE); + exit(1); + } + } else if (strcmp(argv[code], "-auditlog") == 0) { int tempfd, flags; FILE *auditout; @@ -849,12 +864,14 @@ main(int argc, char **argv, char **envp) #ifndef AFS_NT40_ENV printf("Usage: bosserver [-noauth] [-log] " "[-auditlog ] " + "[-rxmaxmtu ] " "[-syslog[=FACILITY]] " "[-enable_peer_stats] [-enable_process_stats] " "[-nofork] " "[-help]\n"); #else printf("Usage: bosserver [-noauth] [-log] " "[-auditlog ] " + "[-rxmaxmtu ] " "[-enable_peer_stats] [-enable_process_stats] " "[-help]\n"); #endif @@ -1006,6 +1023,10 @@ main(int argc, char **argv, char **envp) /* Disable jumbograms */ rx_SetNoJumbo(); + if (rxMaxMTU != -1) { + rx_SetMaxMTU(rxMaxMTU); + } + tservice = rx_NewService( /* port */ 0, /* service id */ 1, /*service name */ "bozo", /* security classes */ diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index 9567dbda5..7cdfb4be5 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -166,6 +166,7 @@ int pr_realmNameLen; char *pr_realmName; int restricted = 0; +int rxMaxMTU = -1; static struct afsconf_cell info; @@ -349,6 +350,20 @@ main(int argc, char **argv) } else printf("Warning: auditlog %s not writable, ignored.\n", fileName); } + else if (!strncmp(arg, "-rxmaxmtu", alen)) { + if ((a + 1) >= argc) { + fprintf(stderr, "missing argument for -rxmaxmtu\n"); + PT_EXIT(1); + } + rxMaxMTU = atoi(argv[++a]); + if ((rxMaxMTU < RX_MIN_PACKET_SIZE) || + (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) { + printf("rxMaxMTU %d% invalid; must be between %d-%d\n", + rxMaxMTU, RX_MIN_PACKET_SIZE, + RX_MAX_PACKET_DATA_SIZE); + PT_EXIT(1); + } + } else if (*arg == '-') { /* hack in help flag support */ @@ -359,7 +374,7 @@ main(int argc, char **argv) "[-syslog[=FACILITY]] " "[-p ] [-rebuild] " "[-groupdepth ] " - "[-restricted] " + "[-restricted] [-rxmaxmtu ]" "[-enable_peer_stats] [-enable_process_stats] " "[-default_access default_user_access default_group_access] " "[-help]\n"); @@ -368,7 +383,7 @@ main(int argc, char **argv) "[-auditlog ] " "[-p ] [-rebuild] " "[-default_access default_user_access default_group_access] " - "[-restricted] " + "[-restricted] [-rxmaxmtu ]" "[-groupdepth ] " "[-help]\n"); #endif #else @@ -379,13 +394,13 @@ main(int argc, char **argv) "[-p ] [-rebuild] " "[-enable_peer_stats] [-enable_process_stats] " "[-default_access default_user_access default_group_access] " - "[-restricted] " + "[-restricted] [-rxmaxmtu ]" "[-help]\n"); #else /* AFS_NT40_ENV */ printf("Usage: ptserver [-database ] " "[-auditlog ] " "[-default_access default_user_access default_group_access] " - "[-restricted] " + "[-restricted] [-rxmaxmtu ]" "[-p ] [-rebuild] " "[-help]\n"); #endif #endif @@ -499,6 +514,10 @@ main(int argc, char **argv) /* Disable jumbograms */ rx_SetNoJumbo(); + if (rxMaxMTU != -1) { + rx_SetMaxMTU(rxMaxMTU); + } + tservice = rx_NewService(0, PRSRV, "Protection Server", sc, 3, PR_ExecuteRequest); diff --git a/src/viced/viced.c b/src/viced/viced.c index 207c2928a..79140153b 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -167,6 +167,7 @@ int SawPctSpare; int debuglevel = 0; int printBanner = 0; int rxJumbograms = 1; /* default is to send and receive jumbograms. */ +int rxMaxMTU = -1; afs_int32 implicitAdminRights = PRSFS_LOOKUP; /* The ADMINISTER right is * already implied */ afs_int32 readonlyServer = 0; @@ -734,6 +735,7 @@ FlagMsg() strcat(buffer, "[-rxpck ] "); strcat(buffer, "[-rxdbg (enable rx debugging)] "); strcat(buffer, "[-rxdbge (enable rxevent debugging)] "); + strcat(buffer, "[-rxmaxmtu ] "); #if AFS_PTHREAD_ENV strcat(buffer, "[-vattachpar ] "); #endif @@ -1050,6 +1052,19 @@ ParseArgs(int argc, char *argv[]) #endif else if (!strcmp(argv[i], "-nojumbo")) { rxJumbograms = 0; + } else if (!strcmp(argv[i], "-rxmaxmtu")) { + if ((i + 1) >= argc) { + fprintf(stderr, "missing argument for -rxmaxmtu\n"); + return -1; + } + rxMaxMTU = atoi(argv[++i]); + if ((rxMaxMTU < RX_MIN_PACKET_SIZE) || + (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) { + printf("rxMaxMTU %d% invalid; must be between %d-%d\n", + rxMaxMTU, RX_MIN_PACKET_SIZE, + RX_MAX_PACKET_DATA_SIZE); + return -1; + } } else if (!strcmp(argv[i], "-realm")) { extern char local_realm[AFS_REALM_SZ]; if ((i + 1) >= argc) { @@ -1791,6 +1806,9 @@ main(int argc, char *argv[]) /* Don't send and don't allow 3.4 clients to send jumbograms. */ rx_SetNoJumbo(); } + if (rxMaxMTU != -1) { + rx_SetMaxMTU(rxMaxMTU); + } rx_GetIFInfo(); rx_SetRxDeadTime(30); sc[0] = rxnull_NewServerSecurityObject(); diff --git a/src/vlserver/vlserver.c b/src/vlserver/vlserver.c index d2f471141..c278842f8 100644 --- a/src/vlserver/vlserver.c +++ b/src/vlserver/vlserver.c @@ -71,6 +71,7 @@ static CheckSignal(); int LogLevel = 0; int smallMem = 0; int rxJumbograms = 1; /* default is to send and receive jumbo grams */ +int rxMaxMTU = -1; static void CheckSignal_Signal() @@ -178,6 +179,20 @@ main(argc, argv) } else if (strcmp(argv[index], "-nojumbo") == 0) { rxJumbograms = 0; + } else if (!strcmp(argv[i], "-rxmaxmtu")) { + if ((i + 1) >= argc) { + fprintf(stderr, "missing argument for -rxmaxmtu\n"); + return -1; + } + rxMaxMTU = atoi(argv[++i]); + if ((rxMaxMTU < RX_MIN_PACKET_SIZE) || + (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) { + printf("rxMaxMTU %d% invalid; must be between %d-%d\n", + rxMaxMTU, RX_MIN_PACKET_SIZE, + RX_MAX_PACKET_DATA_SIZE); + return -1; + } + } else if (strcmp(argv[index], "-smallmem") == 0) { smallMem = 1; @@ -230,12 +245,14 @@ main(argc, argv) /* support help flag */ #ifndef AFS_NT40_ENV printf("Usage: vlserver [-p ] [-nojumbo] " + "[-rxmaxmtu ] " "[-auditlog ] " "[-syslog[=FACILITY]] " "[-enable_peer_stats] [-enable_process_stats] " "[-help]\n"); #else printf("Usage: vlserver [-p ] [-nojumbo] " + "[-rxmaxmtu ] " "[-auditlog ] " "[-enable_peer_stats] [-enable_process_stats] " "[-help]\n"); @@ -323,6 +340,9 @@ main(argc, argv) if (!rxJumbograms) { rx_SetNoJumbo(); } + if (rxMaxMTU != -1) { + rx_SetMaxMTU(rxMaxMTU); + } rx_SetRxDeadTime(50); memset(HostAddress, 0, sizeof(HostAddress)); diff --git a/src/volser/volmain.c b/src/volser/volmain.c index 63eeae624..ca643b586 100644 --- a/src/volser/volmain.c +++ b/src/volser/volmain.c @@ -242,6 +242,7 @@ main(int argc, char **argv) char commandLine[150]; int i; int rxJumbograms = 1; /* default is to send and receive jumbograms. */ + int rxMaxMTU = -1; int bufSize = 0; /* temp variable to read in udp socket buf size */ #ifdef AFS_AIX32_ENV @@ -326,6 +327,19 @@ main(int argc, char **argv) printf("Warning: auditlog %s not writable, ignored.\n", fileName); } else if (strcmp(argv[code], "-nojumbo") == 0) { rxJumbograms = 0; + } else if (!strcmp(argv[code], "-rxmaxmtu")) { + if ((code + 1) >= argc) { + fprintf(stderr, "missing argument for -rxmaxmtu\n"); + exit(1); + } + rxMaxMTU = atoi(argv[++code]); + if ((rxMaxMTU < RX_MIN_PACKET_SIZE) || + (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) { + printf("rxMaxMTU %d% invalid; must be between %d-%d\n", + rxMaxMTU, RX_MIN_PACKET_SIZE, + RX_MAX_PACKET_DATA_SIZE); + exit(1); + } } else if (strcmp(argv[code], "-sleep") == 0) { sscanf(argv[++code], "%d/%d", &TTsleep, &TTrun); if ((TTsleep < 0) || (TTrun <= 0)) { @@ -365,6 +379,7 @@ main(int argc, char **argv) #ifndef AFS_NT40_ENV printf("Usage: volserver [-log] [-p ] " "[-auditlog ] " + "[-nojumbo] [-rxmaxmtu ] " "[-udpsize ] " "[-syslog[=FACILITY]] " "[-enable_peer_stats] [-enable_process_stats] " @@ -372,6 +387,7 @@ main(int argc, char **argv) #else printf("Usage: volserver [-log] [-p ] " "[-auditlog ] " + "[-nojumbo] [-rxmaxmtu ] " "[-udpsize ] " "[-enable_peer_stats] [-enable_process_stats] " "[-help]\n"); @@ -420,6 +436,9 @@ main(int argc, char **argv) /* Don't allow 3.4 vos clients to send jumbograms and we don't send. */ rx_SetNoJumbo(); } + if (rxMaxMTU != -1) { + rx_SetMaxMTU(rxMaxMTU); + } rx_GetIFInfo(); rx_SetRxDeadTime(420); memset(busyFlags, 0, sizeof(busyFlags)); -- 2.39.5