> 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 <d...@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                                                 rgri...@freebsd.org
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to