Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 May 2019 14:17:03 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r348326 - in stable/12/libexec/bootpd: . bootpgw
Message-ID:  <201905281417.x4SEH3u4072786@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Tue May 28 14:17:03 2019
New Revision: 348326
URL: https://svnweb.freebsd.org/changeset/base/348326

Log:
  MFC r348066, r348090:
  bootpd: Add an option to skip modifications to the ARP table.
  
  PR:	30854

Modified:
  stable/12/libexec/bootpd/bootpd.8
  stable/12/libexec/bootpd/bootpd.c
  stable/12/libexec/bootpd/bootpgw/bootpgw.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/libexec/bootpd/bootpd.8
==============================================================================
--- stable/12/libexec/bootpd/bootpd.8	Tue May 28 13:14:53 2019	(r348325)
+++ stable/12/libexec/bootpd/bootpd.8	Tue May 28 14:17:03 2019	(r348326)
@@ -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: stable/12/libexec/bootpd/bootpd.c
==============================================================================
--- stable/12/libexec/bootpd/bootpd.c	Tue May 28 13:14:53 2019	(r348325)
+++ stable/12/libexec/bootpd/bootpd.c	Tue May 28 14:17:03 2019	(r348326)
@@ -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");
-	fprintf(stderr, "               [bootptab [dumpfile]]\n");
+		"usage: bootpd [-a] [-i | -s] [-c chdir-path] [-d level] [-h hostname]\n"
+		"              [-t timeout] [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: stable/12/libexec/bootpd/bootpgw/bootpgw.c
==============================================================================
--- stable/12/libexec/bootpd/bootpgw/bootpgw.c	Tue May 28 13:14:53 2019	(r348325)
+++ stable/12/libexec/bootpd/bootpgw/bootpgw.c	Tue May 28 14:17:03 2019	(r348326)
@@ -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,9 @@ static void
 usage()
 {
 	fprintf(stderr,
-			"usage:  bootpgw [-d level] [-i] [-s] [-t timeout] server\n");
+		"usage: bootpgw [-a] [-i | -s] [-d level] [-h count] [-t timeout]\n"
+		"               [-w time] server\n");
+	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");
@@ -641,19 +647,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,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201905281417.x4SEH3u4072786>