Re: svn commit: r196550 - in head: etc/defaults etc/rc.d share/man/man5

View: New views
2 Messages — Rating Filter:   Alert me  

Parent Message unknown Re: svn commit: r196550 - in head: etc/defaults etc/rc.d share/man/man5

by Xin LI-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

[Moved to -rc@]

Hi, Gleb,

Gleb Kurtsou wrote:
[...]
> Would you please add support for reading pairs from file, that should be
> trivial. I've been using my own rc script for reading static arp entries
> from file but can't find it right now.

I think it's what 'arp -f' would do.  However I didn't found a easy way
to revert its effect, do you have some ideas about it or we need to
teach arp(8) to do that?

Cheers,
- --
Xin LI <delphij@...> http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkqUVLIACgkQi+vbBBjt66CzEgCfa9MShg0JzYxKyA2oFWq3prK6
S7AAn3MGN0QUzRCuPxM2tk5g/hHwvOXR
=DrCH
-----END PGP SIGNATURE-----
_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."

Re: svn commit: r196550 - in head: etc/defaults etc/rc.d share/man/man5

by Gleb Kurtsou-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On (25/08/2009 14:16), Xin LI wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> [Moved to -rc@]
>
> Hi, Gleb,
>
> Gleb Kurtsou wrote:
> [...]
> > Would you please add support for reading pairs from file, that should be
> > trivial. I've been using my own rc script for reading static arp entries
> > from file but can't find it right now.
>
> I think it's what 'arp -f' would do.  However I didn't found a easy way
> to revert its effect, do you have some ideas about it or we need to
> teach arp(8) to do that?
'arp -f' is just fine it parses all the options arp has for static
entries. I was thinking of something like 'static_arp_files' variable.

I've added support for 'arg -d -f' in attached patch (man page part is
missing), hope it helps.

Thanks,
Gleb.

>
> Cheers,
> - --
> Xin LI <delphij@...> http://www.delphij.net/
> FreeBSD - The Power to Serve!
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.12 (FreeBSD)
>
> iEYEARECAAYFAkqUVLIACgkQi+vbBBjt66CzEgCfa9MShg0JzYxKyA2oFWq3prK6
> S7AAn3MGN0QUzRCuPxM2tk5g/hHwvOXR
> =DrCH
> -----END PGP SIGNATURE-----

diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index 8a3410f..11d1df6 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -101,7 +101,7 @@ static int valid_type(int type);
 static int nflag; /* no reverse dns lookups */
 static char *rifname;
 
-static int expire_time, flags, doing_proxy, proxy_only;
+static int expire_time, flags, func, doing_proxy, proxy_only;
 
 /* which function we're supposed to do */
 #define F_GET 1
@@ -109,23 +109,28 @@ static int expire_time, flags, doing_proxy, proxy_only;
 #define F_FILESET 3
 #define F_REPLACE 4
 #define F_DELETE 5
+#define F_FILEDELETE 6
 
 #define SETFUNC(f) { if (func) usage(); func = (f); }
 
 int
 main(int argc, char *argv[])
 {
- int ch, func = 0;
+ int ch;
  int rtn = 0;
  int aflag = 0; /* do it for all entries */
 
+ func = 0;
  while ((ch = getopt(argc, argv, "andfsSi:")) != -1)
  switch(ch) {
  case 'a':
  aflag = 1;
  break;
  case 'd':
- SETFUNC(F_DELETE);
+ if (func == F_FILESET)
+ func = F_FILEDELETE;
+ else
+ SETFUNC(F_DELETE);
  break;
  case 'n':
  nflag = 1;
@@ -137,7 +142,10 @@ main(int argc, char *argv[])
  SETFUNC(F_SET);
  break;
  case 'f' :
- SETFUNC(F_FILESET);
+ if (func == F_DELETE)
+ func = F_FILEDELETE;
+ else
+ SETFUNC(F_FILESET);
  break;
  case 'i':
  rifname = optarg;
@@ -197,6 +205,7 @@ main(int argc, char *argv[])
  }
  break;
  case F_FILESET:
+ case F_FILEDELETE:
  if (argc != 1)
  usage();
  rtn = file(argv[0]);
@@ -213,7 +222,7 @@ static int
 file(char *name)
 {
  FILE *fp;
- int i, retval;
+ int i, j, retval;
  char line[100], arg[5][50], *args[5], *p;
 
  if ((fp = fopen(name, "r")) == NULL)
@@ -237,8 +246,23 @@ file(char *name)
  retval = 1;
  continue;
  }
- if (set(i, args))
- retval = 1;
+ switch (func) {
+ case F_FILESET:
+ if (set(i, args))
+ retval = 1;
+ break;
+ case F_FILEDELETE:
+ for (j = 2; j < i; j++)
+ if (strncmp(args[j], "pub", 3) == 0) {
+ j = 0;
+ break;
+ }
+ if (delete(args[0], j == 0 ? SIN_PROXY : 0))
+ retval = 1;
+ break;
+ default:
+ usage();
+ }
  }
  fclose(fp);
  return (retval);
@@ -650,11 +674,12 @@ nuke_entry(struct sockaddr_dl *sdl __unused,
 static void
 usage(void)
 {
- fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
+ fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
  "usage: arp [-n] [-i interface] hostname",
  "       arp [-n] [-i interface] -a",
  "       arp -d hostname [pub]",
  "       arp -d [-i interface] -a",
+ "       arp -d -f filename",
  "       arp -s hostname ether_addr [temp] [reject | blackhole] [pub [only]]",
  "       arp -S hostname ether_addr [temp] [reject | blackhole] [pub [only]]",
  "       arp -f filename");

_______________________________________________
freebsd-rc@... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "freebsd-rc-unsubscribe@..."