svn commit: r348066 - in head/libexec/bootpd: . bootpgw

Rodney W. Grimes freebsd at gndrsh.dnsmgr.net
Tue May 21 22:55:02 UTC 2019


> Author: markj
> Date: Tue May 21 21:22:43 2019
> New Revision: 348066
> URL: https://svnweb.freebsd.org/changeset/base/348066
> 
> Log:
>   bootpd: Add an option to skip modifications to the ARP table.
>   
>   PR:		30854
>   Submitted by:	Dan Lukes <dan at obluda.cz>
>   Reviewed by:	imp (previous version)
>   MFC after:	1 week
>   Event:		Waterloo Hackathon 2019
>   Differential Revision:	https://reviews.freebsd.org/D2581
> 
> Modified:
>   head/libexec/bootpd/bootpd.8
>   head/libexec/bootpd/bootpd.c
>   head/libexec/bootpd/bootpgw/bootpgw.c
> 
> Modified: head/libexec/bootpd/bootpd.8
> ==============================================================================
> --- head/libexec/bootpd/bootpd.8	Tue May 21 21:14:22 2019	(r348065)
> +++ head/libexec/bootpd/bootpd.8	Tue May 21 21:22:43 2019	(r348066)
> @@ -2,7 +2,7 @@
>  .\"
>  .\" $FreeBSD$
>  .\"
> -.Dd February 10, 2004
> +.Dd May 21, 2019
>  .Dt BOOTPD 8
>  .Os
>  .Sh NAME
> @@ -103,6 +103,8 @@ option may be used to force standalone or inetd mode r
>  .Sh OPTIONS
>  The following options are available:
>  .Bl -tag -width indent
> +.It Fl a
> +Skip ARP table modifications.
>  .It Fl t Ar timeout
>  Specify the
>  .Ar timeout
> 
> Modified: head/libexec/bootpd/bootpd.c
> ==============================================================================
> --- head/libexec/bootpd/bootpd.c	Tue May 21 21:14:22 2019	(r348065)
> +++ head/libexec/bootpd/bootpd.c	Tue May 21 21:22:43 2019	(r348066)
> @@ -143,6 +143,7 @@ struct timeval actualtimeout =
>  	15 * 60L,					/* tv_sec */
>  	0							/* tv_usec */
>  };
> +int arpmod = TRUE;				/* modify the ARP table */
>  
>  /*
>   * General
> @@ -266,6 +267,9 @@ main(argc, argv)
>  			break;
>  		switch (argv[0][1]) {
>  
> +		case 'a':				/* don't modify the ARP table */
> +			arpmod = FALSE;
> +			break;
>  		case 'c':				/* chdir_path */
>  			if (argv[0][2]) {
>  				stmp = &(argv[0][2]);
> @@ -583,8 +587,9 @@ PRIVATE void
>  usage()
>  {
>  	fprintf(stderr,
> -			"usage:  bootpd [-i | -s] [-c chdir-path] [-d level] [-h hostname] [-t timeout]\n");
> +			"usage:  bootpd [-a] [-i | -s] [-c chdir-path] [-d level] [-h hostname] [-t timeout]\n");
>  	fprintf(stderr, "               [bootptab [dumpfile]]\n");
> +	fprintf(stderr, "\t -a\tdon't modify ARP table\n");
>  	fprintf(stderr, "\t -c n\tset current directory\n");
>  	fprintf(stderr, "\t -d n\tset debug level\n");
>  	fprintf(stderr, "\t -h n\tset the hostname to listen on\n");
> @@ -1067,10 +1072,12 @@ sendreply(forward, dst_override)
>  		if (haf == 0)
>  			haf = HTYPE_ETHERNET;
>  
> -		if (debug > 1)
> -			report(LOG_INFO, "setarp %s - %s",
> -				   inet_ntoa(dst), haddrtoa(ha, len));
> -		setarp(s, &dst, haf, ha, len);
> +		if (arpmod) {
> +			if (debug > 1)
> +				report(LOG_INFO, "setarp %s - %s",
> +					   inet_ntoa(dst), haddrtoa(ha, len));
> +			setarp(s, &dst, haf, ha, len);
> +		}
>  	}
>  
>  	if ((forward == 0) &&
> 
> Modified: head/libexec/bootpd/bootpgw/bootpgw.c
> ==============================================================================
> --- head/libexec/bootpd/bootpgw/bootpgw.c	Tue May 21 21:14:22 2019	(r348065)
> +++ head/libexec/bootpd/bootpgw/bootpgw.c	Tue May 21 21:22:43 2019	(r348066)
> @@ -124,6 +124,7 @@ struct timeval actualtimeout =
>  u_char maxhops = 4;				/* Number of hops allowed for requests. */
>  u_int minwait = 3;				/* Number of seconds client must wait before
>  						   its bootrequest packets are forwarded. */
> +int arpmod = TRUE;				/* modify the ARP table */
>  
>  /*
>   * General
> @@ -238,6 +239,9 @@ main(argc, argv)
>  			break;
>  		switch (argv[0][1]) {
>  
> +		case 'a':				/* don't modify the ARP table */
> +			arpmod = FALSE;
> +			break;
>  		case 'd':				/* debug level */
>  			if (argv[0][2]) {
>  				stmp = &(argv[0][2]);
> @@ -496,7 +500,8 @@ static void
>  usage()
>  {
>  	fprintf(stderr,
> -			"usage:  bootpgw [-d level] [-i] [-s] [-t timeout] server\n");
> +			"usage:  \nbootpgw [-a] [-d level] [-h count] [-i] [-s] [-t timeout] [-w time] server\n");
                               ^^^^ this looks very odd and is a very long line.
Output would be:
usage:bb
bootpgw [-a] [-d level] [-h count] [-i] [-s] [-t timeout] [-w time] server

I believe what you want here is:
/*234567890123456789012345678901234567890123456789012345678901234567890123456789*/
			 /*234567890123456789012345678901234567890123456789012345678901234567890123456789*/
			"usage:\t bootpgw [-a] [-d level] [-h count] [-i] [-s]"
			"[-t timeout] [-w time]\n"
			"\t server\n");
(Ignore my /*234 comments, that is just how I figure out how to fit
these types of things.)

> +	fprintf(stderr, "\t -a\tdon't modify ARP table\n");
>  	fprintf(stderr, "\t -d n\tset debug level\n");
>  	fprintf(stderr, "\t -h n\tset max hop count\n");
>  	fprintf(stderr, "\t -i\tforce inetd mode (run as child of inetd)\n");

The whole usage thing uses a space after tab, which also seems odd to me.
I am use to using usage done using pure spaces, no tabs anyplace,
usage: followed by 1 space.

> @@ -641,19 +646,23 @@ handle_reply()
>  	send_addr.sin_addr = bp->bp_yiaddr;
>  	send_addr.sin_port = htons(bootpc_port);
>  
> -	/* Create an ARP cache entry for the client. */
> -	ha = bp->bp_chaddr;
> -	len = bp->bp_hlen;
> -	if (len > MAXHADDRLEN)
> -		len = MAXHADDRLEN;
> -	haf = (int) bp->bp_htype;
> -	if (haf == 0)
> -		haf = HTYPE_ETHERNET;
> +	if (arpmod) {
> +		/* Create an ARP cache entry for the client. */
> +		ha = bp->bp_chaddr;
> +		len = bp->bp_hlen;
> +		struct in_addr dst;
>  
> -	if (debug > 1)
> -		report(LOG_INFO, "setarp %s - %s",
> -			   inet_ntoa(bp->bp_yiaddr), haddrtoa(ha, len));
> -	setarp(s, &bp->bp_yiaddr, haf, ha, len);
> +		if (len > MAXHADDRLEN)
> +			len = MAXHADDRLEN;
> +		haf = (int) bp->bp_htype;
> +		if (haf == 0)
> +			haf = HTYPE_ETHERNET;
> +
> +		if (debug > 1)
> +			report(LOG_INFO, "setarp %s - %s",
> +				   inet_ntoa(dst), haddrtoa(ha, len));
> +		setarp(s, &dst, haf, ha, len);
> +	}
>  
>  	/* Send reply with same size packet as request used. */
>  	if (sendto(s, pktbuf, pktlen, 0,
> 
> 

-- 
Rod Grimes                                                 rgrimes at freebsd.org


More information about the svn-src-head mailing list