From 1c4cd446605706e55e415cec15841acf8b1572e1 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sun, 20 Nov 2011 16:29:55 +0000 Subject: [PATCH] rx: Refactor MaxMTU error checking 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 Tested-by: BuildBot --- src/WINNT/afsd/afsd_init.c | 2 -- src/bozo/bosserver.c | 12 ++++-------- src/ptserver/ptserver.c | 15 +++++---------- src/rx/rx_prototypes.h | 2 +- src/rx/rx_user.c | 7 ++++++- src/viced/viced.c | 15 +++++---------- src/vlserver/vlserver.c | 15 +++++---------- src/volser/volmain.c | 12 ++++-------- 8 files changed, 30 insertions(+), 50 deletions(-) diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index dcf1004ff..eff213c80 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -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); } diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c index 386168907..ff701f461 100644 --- a/src/bozo/bosserver.c +++ b/src/bozo/bosserver.c @@ -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, diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index a5c5009b2..0b473afcf 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -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 = diff --git a/src/rx/rx_prototypes.h b/src/rx/rx_prototypes.h index 6c8d46d66..c36ed4493 100644 --- a/src/rx/rx_prototypes.h +++ b/src/rx/rx_prototypes.h @@ -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 */ diff --git a/src/rx/rx_user.c b/src/rx/rx_user.c index bbda44970..d259560f0 100644 --- a/src/rx/rx_user.c +++ b/src/rx/rx_user.c @@ -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) diff --git a/src/viced/viced.c b/src/viced/viced.c index 4fb4e91b6..ec117d72e 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -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); diff --git a/src/vlserver/vlserver.c b/src/vlserver/vlserver.c index 58aba79cd..b7230a44d 100644 --- a/src/vlserver/vlserver.c +++ b/src/vlserver/vlserver.c @@ -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); diff --git a/src/volser/volmain.c b/src/volser/volmain.c index a8fab24ce..8c1290243 100644 --- a/src/volser/volmain.c +++ b/src/volser/volmain.c @@ -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); -- 2.39.5