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-all
mailing list