forked from mirrors/tftp-hpa-google
#include <sys/socket.h> if it exists;
Add option to control the max blksize negotiated.
This commit is contained in:
parent
b3941f251a
commit
530706aebe
6 changed files with 49 additions and 9 deletions
5
CHANGES
5
CHANGES
|
@ -1,5 +1,10 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
|
Changes in 0.35:
|
||||||
|
Add an option to control the maximum value of blksize
|
||||||
|
negotiated.
|
||||||
|
|
||||||
|
|
||||||
Changes in 0.34:
|
Changes in 0.34:
|
||||||
Additional Solaris gcc compiler bug workarounds; these
|
Additional Solaris gcc compiler bug workarounds; these
|
||||||
actually make the code somewhat cleaner.
|
actually make the code somewhat cleaner.
|
||||||
|
|
10
config.h
10
config.h
|
@ -96,7 +96,17 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
#include <winsock2.h>
|
||||||
|
#else
|
||||||
|
#ifdef HAVE_WINSOCK_H
|
||||||
|
#include <winsock.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Test for EAGAIN/EWOULDBLOCK */
|
/* Test for EAGAIN/EWOULDBLOCK */
|
||||||
#ifdef EAGAIN
|
#ifdef EAGAIN
|
||||||
|
|
|
@ -77,6 +77,9 @@ AC_CHECK_HEADERS(arpa/inet.h)
|
||||||
AC_HEADER_TIME
|
AC_HEADER_TIME
|
||||||
dnl This is needed on some versions of FreeBSD...
|
dnl This is needed on some versions of FreeBSD...
|
||||||
AC_CHECK_HEADERS(machine/param.h)
|
AC_CHECK_HEADERS(machine/param.h)
|
||||||
|
AC_CHECK_HEADERS(sys/socket.h)
|
||||||
|
AC_CHECK_HEADERS(winsock2.h)
|
||||||
|
AC_CHECK_HEADERS(winsock.h)
|
||||||
|
|
||||||
AC_CHECK_TYPES(intmax_t)
|
AC_CHECK_TYPES(intmax_t)
|
||||||
AC_CHECK_TYPES(long long)
|
AC_CHECK_TYPES(long long)
|
||||||
|
@ -89,7 +92,7 @@ AC_TYPE_PID_T
|
||||||
AC_TYPE_MODE_T
|
AC_TYPE_MODE_T
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
|
|
||||||
AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR(socket library not found)])
|
AC_SEARCH_LIBS(socket, [socket ws2_32 wsock32], , [AC_MSG_ERROR(socket library not found)])
|
||||||
AC_SEARCH_LIBS(gethostbyname, [nsl resolv], , [AC_MSG_ERROR(gethostbyname not found)])
|
AC_SEARCH_LIBS(gethostbyname, [nsl resolv], , [AC_MSG_ERROR(gethostbyname not found)])
|
||||||
AC_SEARCH_LIBS(inet_aton, [nsl resolv], , [AC_MSG_ERROR(inet_aton not found)])
|
AC_SEARCH_LIBS(inet_aton, [nsl resolv], , [AC_MSG_ERROR(inet_aton not found)])
|
||||||
AC_SEARCH_LIBS(herror, [nsl resolv], , [AC_MSG_ERROR(herror not found)])
|
AC_SEARCH_LIBS(herror, [nsl resolv], , [AC_MSG_ERROR(herror not found)])
|
||||||
|
|
|
@ -150,6 +150,15 @@ This flag can be specified multiple times for even higher verbosity.
|
||||||
Indicate that a specific RFC 2347 TFTP option should never be
|
Indicate that a specific RFC 2347 TFTP option should never be
|
||||||
accepted.
|
accepted.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-B\fP \fImax-block-size\fP
|
||||||
|
Specifies the maximum permitted block size. The permitted range for
|
||||||
|
this parameter is from 512 to 65464. Some embedded clients request
|
||||||
|
large block sizes and yet do not handle fragmented packets correctly;
|
||||||
|
for these clients, it is recommended to set this value to the smallest
|
||||||
|
MTU on your network minus 32 bytes (20 bytes for IP, 8 for UDP, and 4
|
||||||
|
for TFTP; less if you use IP options on your network.) For example,
|
||||||
|
on a standard Ethernet (MTU 1500) a value of 1468 is reasonable.
|
||||||
|
.TP
|
||||||
.B \-V
|
.B \-V
|
||||||
Print the version number and configuration to standard output, then
|
Print the version number and configuration to standard output, then
|
||||||
exit gracefully.
|
exit gracefully.
|
||||||
|
|
|
@ -94,6 +94,8 @@ sigjmp_buf timeoutbuf;
|
||||||
#define PKTSIZE MAX_SEGSIZE+4
|
#define PKTSIZE MAX_SEGSIZE+4
|
||||||
char buf[PKTSIZE];
|
char buf[PKTSIZE];
|
||||||
char ackbuf[PKTSIZE];
|
char ackbuf[PKTSIZE];
|
||||||
|
unsigned int max_blksize = MAX_SEGSIZE;
|
||||||
|
|
||||||
struct sockaddr_in from;
|
struct sockaddr_in from;
|
||||||
int fromlen;
|
int fromlen;
|
||||||
off_t tsize;
|
off_t tsize;
|
||||||
|
@ -279,7 +281,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
openlog(__progname, LOG_PID|LOG_NDELAY, LOG_DAEMON);
|
openlog(__progname, LOG_PID|LOG_NDELAY, LOG_DAEMON);
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "cspvVla:u:U:r:t:T:m:")) != -1)
|
while ((c = getopt(argc, argv, "cspvVla:B:u:U:r:t:T:m:")) != -1)
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'c':
|
case 'c':
|
||||||
cancreate = 1;
|
cancreate = 1;
|
||||||
|
@ -299,6 +301,17 @@ main(int argc, char **argv)
|
||||||
case 't':
|
case 't':
|
||||||
waittime = atoi(optarg);
|
waittime = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'B':
|
||||||
|
{
|
||||||
|
char *vp;
|
||||||
|
max_blksize = (unsigned int)strtoul(optarg, &vp, 10);
|
||||||
|
if ( max_blksize < 512 || max_blksize > MAX_SEGSIZE || *vp ) {
|
||||||
|
syslog(LOG_ERR, "Bad maximum blocksize value (range 512-%d): %s",
|
||||||
|
MAX_SEGSIZE, optarg);
|
||||||
|
exit(EX_USAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'T':
|
case 'T':
|
||||||
{
|
{
|
||||||
char *vp;
|
char *vp;
|
||||||
|
@ -817,8 +830,8 @@ set_blksize(char *val, char **ret)
|
||||||
|
|
||||||
if (sz < 8)
|
if (sz < 8)
|
||||||
return(0);
|
return(0);
|
||||||
else if (sz > MAX_SEGSIZE)
|
else if (sz > max_blksize)
|
||||||
sz = MAX_SEGSIZE;
|
sz = max_blksize;
|
||||||
|
|
||||||
segsize = sz;
|
segsize = sz;
|
||||||
sprintf(*ret = b_ret, "%u", sz);
|
sprintf(*ret = b_ret, "%u", sz);
|
||||||
|
@ -845,8 +858,8 @@ set_blksize2(char *val, char **ret)
|
||||||
|
|
||||||
if (sz < 8)
|
if (sz < 8)
|
||||||
return(0);
|
return(0);
|
||||||
else if (sz > MAX_SEGSIZE)
|
else if (sz > max_blksize)
|
||||||
sz = MAX_SEGSIZE;
|
sz = max_blksize;
|
||||||
|
|
||||||
/* Convert to a power of two */
|
/* Convert to a power of two */
|
||||||
if ( sz & (sz-1) ) {
|
if ( sz & (sz-1) ) {
|
||||||
|
|
2
version
2
version
|
@ -1 +1 @@
|
||||||
0.34
|
0.35
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue