support for full arp syntax (4.3BSD/etc/99 from guy@sun.com (Guy Harris))
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Thu, 19 Nov 1987 10:36:40 +0000 (02:36 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Thu, 19 Nov 1987 10:36:40 +0000 (02:36 -0800)
SCCS-vsn: usr.sbin/arp/arp.c 5.4

usr/src/usr.sbin/arp/arp.c

index 28d9fd1..3fd412c 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)arp.c       5.3 (Berkeley) %G%";
+static char *sccsid = "@(#)arp.c       5.4 (Berkeley) %G%";
 #endif
 
 /*
 #endif
 
 /*
@@ -37,7 +37,8 @@ main(argc, argv)
                exit(0);
        }
        if (argc >= 4 && strcmp(argv[1], "-s") == 0) {
                exit(0);
        }
        if (argc >= 4 && strcmp(argv[1], "-s") == 0) {
-               set(argc-2, &argv[2]);
+               if (set(argc-2, &argv[2]))
+                       exit(1);
                exit(0);
        }
        if (argc == 3 && strcmp(argv[1], "-d") == 0) {
                exit(0);
        }
        if (argc == 3 && strcmp(argv[1], "-d") == 0) {
@@ -45,7 +46,8 @@ main(argc, argv)
                exit(0);
        }
        if (argc == 3 && strcmp(argv[1], "-f") == 0) {
                exit(0);
        }
        if (argc == 3 && strcmp(argv[1], "-f") == 0) {
-               file(argv[2]);
+               if (file(argv[2]))
+                       exit(1);
                exit(0);
        }
        usage();
                exit(0);
        }
        usage();
@@ -61,6 +63,7 @@ file(name)
        FILE *fp;
        int i;
        char line[100], arg[5][50], *args[5];
        FILE *fp;
        int i;
        char line[100], arg[5][50], *args[5];
+       int retval;
 
        if ((fp = fopen(name, "r")) == NULL) {
                fprintf(stderr, "arp: cannot open %s\n", name);
 
        if ((fp = fopen(name, "r")) == NULL) {
                fprintf(stderr, "arp: cannot open %s\n", name);
@@ -71,15 +74,20 @@ file(name)
        args[2] = &arg[2][0];
        args[3] = &arg[3][0];
        args[4] = &arg[4][0];
        args[2] = &arg[2][0];
        args[3] = &arg[3][0];
        args[4] = &arg[4][0];
+       retval = 0;
        while(fgets(line, 100, fp) != NULL) {
        while(fgets(line, 100, fp) != NULL) {
-               i = sscanf(line, "%s %s %s %s", arg[0], arg[1], arg[2], arg[3]);
+               i = sscanf(line, "%s %s %s %s %s", arg[0], arg[1], arg[2],
+                   arg[3], arg[4]);
                if (i < 2) {
                        fprintf(stderr, "arp: bad line: %s\n", line);
                if (i < 2) {
                        fprintf(stderr, "arp: bad line: %s\n", line);
+                       retval = 1;
                        continue;
                }
                        continue;
                }
-               set(i, args);
+               if (set(i, args))
+                       retval = 1;
        }
        fclose(fp);
        }
        fclose(fp);
+       return (retval);
 }
 
 /*
 }
 
 /*
@@ -105,14 +113,14 @@ set(argc, argv)
                hp = gethostbyname(host);
                if (hp == NULL) {
                        fprintf(stderr, "arp: %s: unknown host\n", host);
                hp = gethostbyname(host);
                if (hp == NULL) {
                        fprintf(stderr, "arp: %s: unknown host\n", host);
-                       return;
+                       return (1);
                }
                bcopy((char *)hp->h_addr, (char *)&sin->sin_addr,
                    sizeof sin->sin_addr);
        }
        ea = (u_char *)ar.arp_ha.sa_data;
        if (ether_aton(eaddr, ea))
                }
                bcopy((char *)hp->h_addr, (char *)&sin->sin_addr,
                    sizeof sin->sin_addr);
        }
        ea = (u_char *)ar.arp_ha.sa_data;
        if (ether_aton(eaddr, ea))
-               return;
+               return (1);
        ar.arp_flags = ATF_PERM;
        while (argc-- > 0) {
                if (strncmp(argv[0], "temp", 4) == 0)
        ar.arp_flags = ATF_PERM;
        while (argc-- > 0) {
                if (strncmp(argv[0], "temp", 4) == 0)
@@ -134,6 +142,7 @@ set(argc, argv)
                exit(1);
        }
        close(s);
                exit(1);
        }
        close(s);
+       return (0);
 }
 
 
 }
 
 
@@ -250,6 +259,7 @@ dump(kernel, mem)
        struct hostent *hp;
        char *host;
        int bynumber = 0;
        struct hostent *hp;
        char *host;
        int bynumber = 0;
+       extern int h_errno;
 
        nlist(kernel, nl);
        if(nl[X_ARPTAB_SIZE].n_type == 0) {
 
        nlist(kernel, nl);
        if(nl[X_ARPTAB_SIZE].n_type == 0) {
@@ -334,6 +344,6 @@ usage()
        printf("Usage: arp hostname\n");
        printf("       arp -a [/vmunix] [/dev/kmem]\n");
        printf("       arp -d hostname\n");
        printf("Usage: arp hostname\n");
        printf("       arp -a [/vmunix] [/dev/kmem]\n");
        printf("       arp -d hostname\n");
-       printf("       arp -s hostname ether_addr [temp] [pub]\n");
+       printf("       arp -s hostname ether_addr [temp] [pub] [trail]\n");
        printf("       arp -f filename\n");
 }
        printf("       arp -f filename\n");
 }