rx: Refactor MaxMTU error checking
authorSimon Wilkinson <sxw@your-file-system.com>
Sun, 20 Nov 2011 16:29:55 +0000 (16:29 +0000)
committerDerrick Brashear <shadow@dementix.org>
Sat, 3 Dec 2011 14:15:59 +0000 (06:15 -0800)
The error checking on the rxMaxMTU parameter was done individually by
every server that sets it, using "internal" RX #defines to do so.
Instead, do the error checking within the function that actually sets
the MTU, reducing both the amount of code duplication, and the amount
of RX knowledge held within the servers.

Change-Id: Ic2cdd9425d5344a5137f76f66f711f4dee91a7b6
Reviewed-on: http://gerrit.openafs.org/6091
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/WINNT/afsd/afsd_init.c
src/bozo/bosserver.c
src/ptserver/ptserver.c
src/rx/rx_prototypes.h
src/rx/rx_user.c
src/viced/viced.c
src/vlserver/vlserver.c
src/volser/volmain.c

index dcf1004..eff213c 100644 (file)
@@ -1392,8 +1392,6 @@ afsd_InitCM(char **reasonP)
     }
 
     if ( rx_mtu != -1 ) {
-        extern void rx_SetMaxMTU(int);
-
         rx_SetMaxMTU(rx_mtu);
         afsi_log("rx_SetMaxMTU %d successful", rx_mtu);
     }
index 3861689..ff701f4 100644 (file)
@@ -955,13 +955,6 @@ main(int argc, char **argv, char **envp)
                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-%" AFS_SIZET_FMT "\n",
-                       rxMaxMTU, RX_MIN_PACKET_SIZE,
-                       RX_MAX_PACKET_DATA_SIZE);
-               exit(1);
-           }
        }
        else if (strcmp(argv[code], "-auditlog") == 0) {
            auditFileName = argv[++code];
@@ -1193,7 +1186,10 @@ main(int argc, char **argv, char **envp)
     rx_SetNoJumbo();
 
     if (rxMaxMTU != -1) {
-       rx_SetMaxMTU(rxMaxMTU);
+       if (rx_SetMaxMTU(rxMaxMTU) != 0) {
+           bozo_Log("bosserver: rxMaxMTU %d is invalid\n", rxMaxMTU);
+           exit(1);
+       }
     }
 
     tservice = rx_NewServiceHost(host, 0, /* service id */ 1,
index a5c5009..0b473af 100644 (file)
@@ -396,15 +396,7 @@ main(int argc, char **argv)
 
     cmd_OptionAsFlag(opts, OPT_rxbind, &rxBind);
 
-    if (cmd_OptionAsInt(opts, OPT_rxmaxmtu, &rxMaxMTU) == 0) {
-       if ((rxMaxMTU < RX_MIN_PACKET_SIZE) ||
-           (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) {
-           printf("rxMaxMTU %d invalid; must be between %d-%" AFS_SIZET_FMT "\n",
-                  rxMaxMTU, RX_MIN_PACKET_SIZE,
-                  RX_MAX_PACKET_DATA_SIZE);
-           PT_EXIT(1);
-       }
-    }
+    cmd_OptionAsInt(opts, OPT_rxmaxmtu, &rxMaxMTU);
 
     /* rxkad options */
     cmd_OptionAsFlag(opts, OPT_dotted, &rxkadDisableDotCheck);
@@ -512,7 +504,10 @@ main(int argc, char **argv)
     rx_SetNoJumbo();
 
     if (rxMaxMTU != -1) {
-       rx_SetMaxMTU(rxMaxMTU);
+       if (rx_SetMaxMTU(rxMaxMTU) != 0) {
+           printf("rxMaxMTU %d is invalid\n", rxMaxMTU);
+           PT_EXIT(1);
+       }
     }
 
     tservice =
index 6c8d46d..c36ed44 100644 (file)
@@ -605,7 +605,7 @@ extern void osi_Panic(char *fmt, ...) AFS_NORETURN;
 
 extern void rx_GetIFInfo(void);
 extern void rx_SetNoJumbo(void);
-extern void rx_SetMaxMTU(int mtu);
+extern int rx_SetMaxMTU(int mtu);
 
 /* rx_xmit_nt.c */
 
index bbda449..d259560 100644 (file)
@@ -764,10 +764,15 @@ rx_SetNoJumbo(void)
 
 /* Override max MTU.  If rx_SetNoJumbo is called, it must be
    called before calling rx_SetMaxMTU since SetNoJumbo clobbers rx_maxReceiveSize */
-void
+int
 rx_SetMaxMTU(int mtu)
 {
+    if (mtu < RX_MIN_PACKET_SIZE || mtu > RX_MAX_PACKET_DATA_SIZE)
+       return EINVAL;
+
     rx_MyMaxSendSize = rx_maxReceiveSizeUser = rx_maxReceiveSize = mtu;
+
+    return 0;
 }
 
 #if defined(ADAPT_PMTU)
index 4fb4e91..ec117d7 100644 (file)
@@ -1426,15 +1426,7 @@ ParseArgs(int argc, char *argv[])
     cmd_OptionAsFlag(opts, OPT_rxdbge, &eventlog);
     cmd_OptionAsInt(opts, OPT_rxpck, &rxpackets);
 
-    if (cmd_OptionAsInt(opts, OPT_rxmaxmtu, &rxMaxMTU) == 0) {
-       if ((rxMaxMTU < RX_MIN_PACKET_SIZE) ||
-           (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) {
-           printf("rxMaxMTU %d invalid; must be between %d-%" AFS_SIZET_FMT "\n",
-                  rxMaxMTU, RX_MIN_PACKET_SIZE,
-                  RX_MAX_PACKET_DATA_SIZE);
-           return(-1);
-       }
-    }
+    cmd_OptionAsInt(opts, OPT_rxmaxmtu, &rxMaxMTU);
 
     if (cmd_OptionAsInt(opts, OPT_udpsize, &optval) == 0) {
        if (optval < rx_GetMinUdpBufSize()) {
@@ -2069,7 +2061,10 @@ main(int argc, char *argv[])
        rx_SetNoJumbo();
     }
     if (rxMaxMTU != -1) {
-       rx_SetMaxMTU(rxMaxMTU);
+       if (rx_SetMaxMTU(rxMaxMTU) != 0) {
+           ViceLog(0, ("rxMaxMTU %d is invalid\n", rxMaxMTU));
+           exit(1);
+       }
     }
     rx_GetIFInfo();
     rx_SetRxDeadTime(30);
index 58aba79..b7230a4 100644 (file)
@@ -301,15 +301,7 @@ main(int argc, char **argv)
 
     cmd_OptionAsFlag(opts, OPT_rxbind, &rxBind);
 
-    if (cmd_OptionAsInt(opts, OPT_rxmaxmtu, &rxMaxMTU) == 0) {
-       if ((rxMaxMTU < RX_MIN_PACKET_SIZE) ||
-           (rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) {
-           printf("rxMaxMTU %d invalid; must be between %d-%" AFS_SIZET_FMT "\n",
-                  rxMaxMTU, RX_MIN_PACKET_SIZE,
-                  RX_MAX_PACKET_DATA_SIZE);
-           return -1;
-       }
-    }
+    cmd_OptionAsInt(opts, OPT_rxmaxmtu, &rxMaxMTU);
 
     /* rxkad options */
     cmd_OptionAsFlag(opts, OPT_dotted, &rxkadDisableDotCheck);
@@ -406,7 +398,10 @@ main(int argc, char **argv)
        rx_SetNoJumbo();
     }
     if (rxMaxMTU != -1) {
-       rx_SetMaxMTU(rxMaxMTU);
+       if (rx_SetMaxMTU(rxMaxMTU) != 0) {
+           printf("rxMaxMTU %d invalid\n", rxMaxMTU);
+           return -1;
+       }
     }
     rx_SetRxDeadTime(50);
 
index a8fab24..8c12902 100644 (file)
@@ -318,13 +318,6 @@ main(int argc, char **argv)
                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-%" AFS_SIZET_FMT "\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)) {
@@ -454,7 +447,10 @@ main(int argc, char **argv)
        rx_SetNoJumbo();
     }
     if (rxMaxMTU != -1) {
-       rx_SetMaxMTU(rxMaxMTU);
+       if (rx_SetMaxMTU(rxMaxMTU) != 0) {
+           fprintf(stderr, "rxMaxMTU %d is invalid\n", rxMaxMTU);
+           VS_EXIT(1);
+       }
     }
     rx_GetIFInfo();
     rx_SetRxDeadTime(420);