diff mbox series

[v2,01/11] libnet: Get rid of unused huge_load and block_size parameters

Message ID 1526658340-1992-2-git-send-email-thuth@redhat.com
State Accepted
Headers show
Series Support network booting with pxelinux.cfg files | expand

Commit Message

Thomas Huth May 18, 2018, 3:45 p.m. UTC
The blocksize is hard-coded to 1428 bytes in obp-tftp.fs, so instead of
hardcoding this in the Forth code, we could also move this into tftp.c
directly instead. A similar condition exists with the huge-tftp-load
parameter. While this non-standard variable could still be changed in the
obp-tftp package, it does not make much sense to set it to zero since you
only lose the possibility to do huge TFTP loads with index wrap-around in
that case.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 lib/libnet/libnet.code       |  4 +---
 lib/libnet/netapps.h         |  3 +--
 lib/libnet/netload.c         | 11 ++++-------
 lib/libnet/tftp.c            | 13 +++----------
 lib/libnet/tftp.h            |  2 +-
 slof/fs/packages/obp-tftp.fs |  3 ---
 6 files changed, 10 insertions(+), 26 deletions(-)

Comments

Greg Kurz May 22, 2018, 2:49 p.m. UTC | #1
On Fri, 18 May 2018 17:45:30 +0200
Thomas Huth <thuth@redhat.com> wrote:

> The blocksize is hard-coded to 1428 bytes in obp-tftp.fs, so instead of
> hardcoding this in the Forth code, we could also move this into tftp.c
> directly instead. A similar condition exists with the huge-tftp-load
> parameter. While this non-standard variable could still be changed in the
> obp-tftp package, it does not make much sense to set it to zero since you
> only lose the possibility to do huge TFTP loads with index wrap-around in
> that case.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  lib/libnet/libnet.code       |  4 +---
>  lib/libnet/netapps.h         |  3 +--
>  lib/libnet/netload.c         | 11 ++++-------
>  lib/libnet/tftp.c            | 13 +++----------
>  lib/libnet/tftp.h            |  2 +-
>  slof/fs/packages/obp-tftp.fs |  3 ---
>  6 files changed, 10 insertions(+), 26 deletions(-)
> 
> diff --git a/lib/libnet/libnet.code b/lib/libnet/libnet.code
> index 2746782..419419d 100644
> --- a/lib/libnet/libnet.code
> +++ b/lib/libnet/libnet.code
> @@ -4,11 +4,9 @@
>  PRIM(NET_X2d_LOAD)
>  	int alen = TOS.n; POP;
>  	char *arg = TOS.a; POP;
> -	int blocksize = TOS.n; POP;
> -	int hugeload = TOS.n; POP;
>  	long maxlen = TOS.n; POP;
>  	void *loadaddr = TOS.a;
> -	TOS.n = netload(loadaddr, maxlen, hugeload, blocksize, arg, alen);
> +	TOS.n = netload(loadaddr, maxlen, arg, alen);
>  MIRP
>  
>  PRIM(NET_X2d_PING)
> diff --git a/lib/libnet/netapps.h b/lib/libnet/netapps.h
> index 0e637e1..6e00466 100644
> --- a/lib/libnet/netapps.h
> +++ b/lib/libnet/netapps.h
> @@ -18,8 +18,7 @@
>  
>  struct filename_ip;
>  
> -extern int netload(char *buffer, int len, int huge_load, int block_size,
> -                   char *args_fs, int alen);
> +extern int netload(char *buffer, int len, char *args_fs, int alen);
>  extern int ping(char *args_fs, int alen);
>  extern int dhcp(char *ret_buffer, struct filename_ip *fn_ip,
>  		unsigned int retries, int flags);
> diff --git a/lib/libnet/netload.c b/lib/libnet/netload.c
> index 5c37fe2..8dca654 100644
> --- a/lib/libnet/netload.c
> +++ b/lib/libnet/netload.c
> @@ -405,13 +405,12 @@ static void seed_rng(uint8_t mac[])
>  }
>  
>  static int tftp_load(filename_ip_t *fnip, unsigned char *buffer, int len,
> -		     unsigned int retries, int32_t mode,
> -		     int32_t blksize, int ip_vers)
> +		     unsigned int retries, int ip_vers)
>  {
>  	tftp_err_t tftp_err;
>  	int rc;
>  
> -	rc = tftp(fnip, buffer, len, retries, &tftp_err, mode, blksize, ip_vers);
> +	rc = tftp(fnip, buffer, len, retries, &tftp_err, ip_vers);
>  
>  	if (rc > 0) {
>  		printf("  TFTP: Received %s (%d KBytes)\n", fnip->filename,
> @@ -510,8 +509,7 @@ static void encode_response(char *pkt_buffer, size_t size, int ip_init)
>  	}
>  }
>  
> -int netload(char *buffer, int len, int huge_load, int block_size,
> -	    char *args_fs, int alen)
> +int netload(char *buffer, int len, char *args_fs, int alen)
>  {
>  	int rc;
>  	filename_ip_t fn_ip;
> @@ -755,8 +753,7 @@ int netload(char *buffer, int len, int huge_load, int block_size,
>  
>  	/* Do the TFTP load and print error message if necessary */
>  	rc = tftp_load(&fn_ip, (unsigned char *)buffer, len,
> -		       obp_tftp_args.tftp_retries, huge_load,
> -		       block_size, ip_version);
> +		       obp_tftp_args.tftp_retries, ip_version);
>  
>  	if (obp_tftp_args.ip_init == IP_INIT_DHCP)
>  		dhcp_send_release(fn_ip.fd);
> diff --git a/lib/libnet/tftp.c b/lib/libnet/tftp.c
> index 1656c27..5e7951f 100644
> --- a/lib/libnet/tftp.c
> +++ b/lib/libnet/tftp.c
> @@ -497,19 +497,15 @@ void handle_tftp_dun(uint8_t err_code)
>   * @param  _len          size of destination buffer
>   * @param  _retries      max number of retries
>   * @param  _tftp_err     contains info about TFTP-errors (e.g. lost packets)
> - * @param  _mode         NON ZERO - multicast, ZERO - unicast
> - * @param  _blocksize    blocksize for DATA-packets
>   * @return               ZERO - error condition occurs
>   *                       NON ZERO - size of received file
>   */
>  int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
> -	 unsigned int _retries, tftp_err_t * _tftp_err,
> -	 int32_t _mode, int32_t _blocksize, int _ip_version)
> +	 unsigned int _retries, tftp_err_t * _tftp_err, int _ip_version)
>  {
>  	retries     = _retries;
>  	fn_ip       = _fn_ip;
>  	len         = _len;
> -	huge_load   = _mode;
>  	ip_version  = _ip_version;
>  	tftp_errno  = 0;
>  	tftp_err    = _tftp_err;
> @@ -523,17 +519,14 @@ int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
>  	port_number = -1;
>  	progress_first = -1;
>  	progress_last_bytes = 0;
> +	huge_load   = 1;
>  

This static variable seems to have only two users, both in handle_tftp():

                else if( block == 0xffff && huge_load != 0
                     &&  (tftp->th_data == 0 || tftp->th_data == 1) ) {
                        block = tftp->th_data;
                }

and

                if (block >= 0xffff && huge_load == 0) {
                        tftp_errno = -9;
                        goto error;
                }

which could be simplified as well, but this can be done later I guess.

Reviewed-by: Greg Kurz <groug@kaod.org>

>  	/* Default blocksize must be 512 for TFTP servers
>  	 * which do not support the RRQ blocksize option */
>  	blocksize = 512;
>  
>  	/* Preferred blocksize - used as option for the read request */
> -	if (_blocksize < 8)
> -		_blocksize = 8;
> -	else if (_blocksize > MAX_BLOCKSIZE)
> -		_blocksize = MAX_BLOCKSIZE;
> -	sprintf(blocksize_str, "%d", _blocksize);
> +	sprintf(blocksize_str, "%d", MAX_BLOCKSIZE);
>  
>  	printf("  Receiving data:  ");
>  	print_progress(-1, 0);
> diff --git a/lib/libnet/tftp.h b/lib/libnet/tftp.h
> index e32e473..a09cf71 100644
> --- a/lib/libnet/tftp.h
> +++ b/lib/libnet/tftp.h
> @@ -41,7 +41,7 @@ typedef struct {
>  } tftp_err_t;
>  
>  int tftp(filename_ip_t *, unsigned char  *, int, unsigned int,
> -         tftp_err_t *, int32_t mode, int32_t blocksize, int ip_version);
> +         tftp_err_t *, int ip_version);
>  
>  int32_t handle_tftp(int fd, uint8_t *, int32_t);
>  void handle_tftp_dun(uint8_t err_code);
> diff --git a/slof/fs/packages/obp-tftp.fs b/slof/fs/packages/obp-tftp.fs
> index 17fb980..19c11e1 100644
> --- a/slof/fs/packages/obp-tftp.fs
> +++ b/slof/fs/packages/obp-tftp.fs
> @@ -12,8 +12,6 @@
>  
>  s" obp-tftp" device-name
>  
> -VARIABLE huge-tftp-load 1 huge-tftp-load !
> -
>  : open ( -- okay? ) 
>      true
>  ;
> @@ -28,7 +26,6 @@ VARIABLE huge-tftp-load 1 huge-tftp-load !
>  
>      60000000                        ( addr maxlen )
>  
> -    huge-tftp-load @  d# 1428       ( addr maxlen hugetftp blocksize )
>      \ Add OBP-TFTP Bootstring argument, e.g. "10.128.0.1,bootrom.bin,10.128.40.1"
>      my-args
>      net-load dup 0< IF drop 0 THEN
Thomas Huth May 23, 2018, 7:40 a.m. UTC | #2
On 22.05.2018 16:49, Greg Kurz wrote:
> On Fri, 18 May 2018 17:45:30 +0200
> Thomas Huth <thuth@redhat.com> wrote:
> 
>> The blocksize is hard-coded to 1428 bytes in obp-tftp.fs, so instead of
>> hardcoding this in the Forth code, we could also move this into tftp.c
>> directly instead. A similar condition exists with the huge-tftp-load
>> parameter. While this non-standard variable could still be changed in the
>> obp-tftp package, it does not make much sense to set it to zero since you
>> only lose the possibility to do huge TFTP loads with index wrap-around in
>> that case.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  lib/libnet/libnet.code       |  4 +---
>>  lib/libnet/netapps.h         |  3 +--
>>  lib/libnet/netload.c         | 11 ++++-------
>>  lib/libnet/tftp.c            | 13 +++----------
>>  lib/libnet/tftp.h            |  2 +-
>>  slof/fs/packages/obp-tftp.fs |  3 ---
>>  6 files changed, 10 insertions(+), 26 deletions(-)
>>
>> diff --git a/lib/libnet/libnet.code b/lib/libnet/libnet.code
>> index 2746782..419419d 100644
>> --- a/lib/libnet/libnet.code
>> +++ b/lib/libnet/libnet.code
>> @@ -4,11 +4,9 @@
>>  PRIM(NET_X2d_LOAD)
>>  	int alen = TOS.n; POP;
>>  	char *arg = TOS.a; POP;
>> -	int blocksize = TOS.n; POP;
>> -	int hugeload = TOS.n; POP;
>>  	long maxlen = TOS.n; POP;
>>  	void *loadaddr = TOS.a;
>> -	TOS.n = netload(loadaddr, maxlen, hugeload, blocksize, arg, alen);
>> +	TOS.n = netload(loadaddr, maxlen, arg, alen);
>>  MIRP
>>  
>>  PRIM(NET_X2d_PING)
>> diff --git a/lib/libnet/netapps.h b/lib/libnet/netapps.h
>> index 0e637e1..6e00466 100644
>> --- a/lib/libnet/netapps.h
>> +++ b/lib/libnet/netapps.h
>> @@ -18,8 +18,7 @@
>>  
>>  struct filename_ip;
>>  
>> -extern int netload(char *buffer, int len, int huge_load, int block_size,
>> -                   char *args_fs, int alen);
>> +extern int netload(char *buffer, int len, char *args_fs, int alen);
>>  extern int ping(char *args_fs, int alen);
>>  extern int dhcp(char *ret_buffer, struct filename_ip *fn_ip,
>>  		unsigned int retries, int flags);
>> diff --git a/lib/libnet/netload.c b/lib/libnet/netload.c
>> index 5c37fe2..8dca654 100644
>> --- a/lib/libnet/netload.c
>> +++ b/lib/libnet/netload.c
>> @@ -405,13 +405,12 @@ static void seed_rng(uint8_t mac[])
>>  }
>>  
>>  static int tftp_load(filename_ip_t *fnip, unsigned char *buffer, int len,
>> -		     unsigned int retries, int32_t mode,
>> -		     int32_t blksize, int ip_vers)
>> +		     unsigned int retries, int ip_vers)
>>  {
>>  	tftp_err_t tftp_err;
>>  	int rc;
>>  
>> -	rc = tftp(fnip, buffer, len, retries, &tftp_err, mode, blksize, ip_vers);
>> +	rc = tftp(fnip, buffer, len, retries, &tftp_err, ip_vers);
>>  
>>  	if (rc > 0) {
>>  		printf("  TFTP: Received %s (%d KBytes)\n", fnip->filename,
>> @@ -510,8 +509,7 @@ static void encode_response(char *pkt_buffer, size_t size, int ip_init)
>>  	}
>>  }
>>  
>> -int netload(char *buffer, int len, int huge_load, int block_size,
>> -	    char *args_fs, int alen)
>> +int netload(char *buffer, int len, char *args_fs, int alen)
>>  {
>>  	int rc;
>>  	filename_ip_t fn_ip;
>> @@ -755,8 +753,7 @@ int netload(char *buffer, int len, int huge_load, int block_size,
>>  
>>  	/* Do the TFTP load and print error message if necessary */
>>  	rc = tftp_load(&fn_ip, (unsigned char *)buffer, len,
>> -		       obp_tftp_args.tftp_retries, huge_load,
>> -		       block_size, ip_version);
>> +		       obp_tftp_args.tftp_retries, ip_version);
>>  
>>  	if (obp_tftp_args.ip_init == IP_INIT_DHCP)
>>  		dhcp_send_release(fn_ip.fd);
>> diff --git a/lib/libnet/tftp.c b/lib/libnet/tftp.c
>> index 1656c27..5e7951f 100644
>> --- a/lib/libnet/tftp.c
>> +++ b/lib/libnet/tftp.c
>> @@ -497,19 +497,15 @@ void handle_tftp_dun(uint8_t err_code)
>>   * @param  _len          size of destination buffer
>>   * @param  _retries      max number of retries
>>   * @param  _tftp_err     contains info about TFTP-errors (e.g. lost packets)
>> - * @param  _mode         NON ZERO - multicast, ZERO - unicast
>> - * @param  _blocksize    blocksize for DATA-packets
>>   * @return               ZERO - error condition occurs
>>   *                       NON ZERO - size of received file
>>   */
>>  int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
>> -	 unsigned int _retries, tftp_err_t * _tftp_err,
>> -	 int32_t _mode, int32_t _blocksize, int _ip_version)
>> +	 unsigned int _retries, tftp_err_t * _tftp_err, int _ip_version)
>>  {
>>  	retries     = _retries;
>>  	fn_ip       = _fn_ip;
>>  	len         = _len;
>> -	huge_load   = _mode;
>>  	ip_version  = _ip_version;
>>  	tftp_errno  = 0;
>>  	tftp_err    = _tftp_err;
>> @@ -523,17 +519,14 @@ int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
>>  	port_number = -1;
>>  	progress_first = -1;
>>  	progress_last_bytes = 0;
>> +	huge_load   = 1;
>>  
> 
> This static variable seems to have only two users, both in handle_tftp():
> 
>                 else if( block == 0xffff && huge_load != 0
>                      &&  (tftp->th_data == 0 || tftp->th_data == 1) ) {
>                         block = tftp->th_data;
>                 }
> 
> and
> 
>                 if (block >= 0xffff && huge_load == 0) {
>                         tftp_errno = -9;
>                         goto error;
>                 }
> 
> which could be simplified as well, but this can be done later I guess.

Yes, I thought about that, too, but I then decided that I'd rather leave
that code there ... if somebody ever wonders whether SLOF supports TFTP
loading with index roll-over (i.e. huge TFTP loads), it's more obvious
to spot this in the sources if we keep that "huge_load" variable in there.

> Reviewed-by: Greg Kurz <groug@kaod.org>

Thanks!

  Thomas
Alexey Kardashevskiy May 25, 2018, 4:58 a.m. UTC | #3
On 19/5/18 1:45 am, Thomas Huth wrote:
> The blocksize is hard-coded to 1428 bytes in obp-tftp.fs, so instead of
> hardcoding this in the Forth code, we could also move this into tftp.c
> directly instead. A similar condition exists with the huge-tftp-load
> parameter. While this non-standard variable could still be changed in the
> obp-tftp package, it does not make much sense to set it to zero since you
> only lose the possibility to do huge TFTP loads with index wrap-around in
> that case.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>



Thanks, applied.
diff mbox series

Patch

diff --git a/lib/libnet/libnet.code b/lib/libnet/libnet.code
index 2746782..419419d 100644
--- a/lib/libnet/libnet.code
+++ b/lib/libnet/libnet.code
@@ -4,11 +4,9 @@ 
 PRIM(NET_X2d_LOAD)
 	int alen = TOS.n; POP;
 	char *arg = TOS.a; POP;
-	int blocksize = TOS.n; POP;
-	int hugeload = TOS.n; POP;
 	long maxlen = TOS.n; POP;
 	void *loadaddr = TOS.a;
-	TOS.n = netload(loadaddr, maxlen, hugeload, blocksize, arg, alen);
+	TOS.n = netload(loadaddr, maxlen, arg, alen);
 MIRP
 
 PRIM(NET_X2d_PING)
diff --git a/lib/libnet/netapps.h b/lib/libnet/netapps.h
index 0e637e1..6e00466 100644
--- a/lib/libnet/netapps.h
+++ b/lib/libnet/netapps.h
@@ -18,8 +18,7 @@ 
 
 struct filename_ip;
 
-extern int netload(char *buffer, int len, int huge_load, int block_size,
-                   char *args_fs, int alen);
+extern int netload(char *buffer, int len, char *args_fs, int alen);
 extern int ping(char *args_fs, int alen);
 extern int dhcp(char *ret_buffer, struct filename_ip *fn_ip,
 		unsigned int retries, int flags);
diff --git a/lib/libnet/netload.c b/lib/libnet/netload.c
index 5c37fe2..8dca654 100644
--- a/lib/libnet/netload.c
+++ b/lib/libnet/netload.c
@@ -405,13 +405,12 @@  static void seed_rng(uint8_t mac[])
 }
 
 static int tftp_load(filename_ip_t *fnip, unsigned char *buffer, int len,
-		     unsigned int retries, int32_t mode,
-		     int32_t blksize, int ip_vers)
+		     unsigned int retries, int ip_vers)
 {
 	tftp_err_t tftp_err;
 	int rc;
 
-	rc = tftp(fnip, buffer, len, retries, &tftp_err, mode, blksize, ip_vers);
+	rc = tftp(fnip, buffer, len, retries, &tftp_err, ip_vers);
 
 	if (rc > 0) {
 		printf("  TFTP: Received %s (%d KBytes)\n", fnip->filename,
@@ -510,8 +509,7 @@  static void encode_response(char *pkt_buffer, size_t size, int ip_init)
 	}
 }
 
-int netload(char *buffer, int len, int huge_load, int block_size,
-	    char *args_fs, int alen)
+int netload(char *buffer, int len, char *args_fs, int alen)
 {
 	int rc;
 	filename_ip_t fn_ip;
@@ -755,8 +753,7 @@  int netload(char *buffer, int len, int huge_load, int block_size,
 
 	/* Do the TFTP load and print error message if necessary */
 	rc = tftp_load(&fn_ip, (unsigned char *)buffer, len,
-		       obp_tftp_args.tftp_retries, huge_load,
-		       block_size, ip_version);
+		       obp_tftp_args.tftp_retries, ip_version);
 
 	if (obp_tftp_args.ip_init == IP_INIT_DHCP)
 		dhcp_send_release(fn_ip.fd);
diff --git a/lib/libnet/tftp.c b/lib/libnet/tftp.c
index 1656c27..5e7951f 100644
--- a/lib/libnet/tftp.c
+++ b/lib/libnet/tftp.c
@@ -497,19 +497,15 @@  void handle_tftp_dun(uint8_t err_code)
  * @param  _len          size of destination buffer
  * @param  _retries      max number of retries
  * @param  _tftp_err     contains info about TFTP-errors (e.g. lost packets)
- * @param  _mode         NON ZERO - multicast, ZERO - unicast
- * @param  _blocksize    blocksize for DATA-packets
  * @return               ZERO - error condition occurs
  *                       NON ZERO - size of received file
  */
 int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
-	 unsigned int _retries, tftp_err_t * _tftp_err,
-	 int32_t _mode, int32_t _blocksize, int _ip_version)
+	 unsigned int _retries, tftp_err_t * _tftp_err, int _ip_version)
 {
 	retries     = _retries;
 	fn_ip       = _fn_ip;
 	len         = _len;
-	huge_load   = _mode;
 	ip_version  = _ip_version;
 	tftp_errno  = 0;
 	tftp_err    = _tftp_err;
@@ -523,17 +519,14 @@  int tftp(filename_ip_t * _fn_ip, unsigned char *_buffer, int _len,
 	port_number = -1;
 	progress_first = -1;
 	progress_last_bytes = 0;
+	huge_load   = 1;
 
 	/* Default blocksize must be 512 for TFTP servers
 	 * which do not support the RRQ blocksize option */
 	blocksize = 512;
 
 	/* Preferred blocksize - used as option for the read request */
-	if (_blocksize < 8)
-		_blocksize = 8;
-	else if (_blocksize > MAX_BLOCKSIZE)
-		_blocksize = MAX_BLOCKSIZE;
-	sprintf(blocksize_str, "%d", _blocksize);
+	sprintf(blocksize_str, "%d", MAX_BLOCKSIZE);
 
 	printf("  Receiving data:  ");
 	print_progress(-1, 0);
diff --git a/lib/libnet/tftp.h b/lib/libnet/tftp.h
index e32e473..a09cf71 100644
--- a/lib/libnet/tftp.h
+++ b/lib/libnet/tftp.h
@@ -41,7 +41,7 @@  typedef struct {
 } tftp_err_t;
 
 int tftp(filename_ip_t *, unsigned char  *, int, unsigned int,
-         tftp_err_t *, int32_t mode, int32_t blocksize, int ip_version);
+         tftp_err_t *, int ip_version);
 
 int32_t handle_tftp(int fd, uint8_t *, int32_t);
 void handle_tftp_dun(uint8_t err_code);
diff --git a/slof/fs/packages/obp-tftp.fs b/slof/fs/packages/obp-tftp.fs
index 17fb980..19c11e1 100644
--- a/slof/fs/packages/obp-tftp.fs
+++ b/slof/fs/packages/obp-tftp.fs
@@ -12,8 +12,6 @@ 
 
 s" obp-tftp" device-name
 
-VARIABLE huge-tftp-load 1 huge-tftp-load !
-
 : open ( -- okay? ) 
     true
 ;
@@ -28,7 +26,6 @@  VARIABLE huge-tftp-load 1 huge-tftp-load !
 
     60000000                        ( addr maxlen )
 
-    huge-tftp-load @  d# 1428       ( addr maxlen hugetftp blocksize )
     \ Add OBP-TFTP Bootstring argument, e.g. "10.128.0.1,bootrom.bin,10.128.40.1"
     my-args
     net-load dup 0< IF drop 0 THEN