View | Details | Raw Unified | Return to bug 145198
Collapse All | Expand All

(-)choparp.c (-7 / +25 lines)
Lines 76-81 Link Here
76
76
77
struct cidr *targets = NULL, *excludes = NULL;
77
struct cidr *targets = NULL, *excludes = NULL;
78
u_char	target_mac[ETHER_ADDR_LEN];	/* target MAC address */
78
u_char	target_mac[ETHER_ADDR_LEN];	/* target MAC address */
79
int verbose = 0;
79
80
80
/*
81
/*
81
   ARP filter program
82
   ARP filter program
Lines 241-247 Link Here
241
	return(0);
242
	return(0);
242
    }
243
    }
243
    if (ntohl(*(u_int32_t *)(arp->arp_tpa)) == ntohl(*(u_int32_t *)(arp->arp_spa))) {
244
    if (ntohl(*(u_int32_t *)(arp->arp_tpa)) == ntohl(*(u_int32_t *)(arp->arp_spa))) {
244
	fprintf(stderr,"checkarp: WARNING: sender equal dest.\n");
245
	if (verbose != 0)
246
	    fprintf(stderr,"checkarp: WARNING: sender equal dest.\n");
247
	return(0);
248
    }
249
    if (0 == ntohl(*(u_int32_t *)(arp->arp_spa))) {
250
	if (verbose != 0)
251
	    fprintf(stderr,"checkarp: WARNING: zero sender address.\n");
245
	return(0);
252
	return(0);
246
    }
253
    }
247
    target_ip = ntohl(*(u_int32_t *)(arp->arp_tpa));
254
    target_ip = ntohl(*(u_int32_t *)(arp->arp_tpa));
Lines 376-388 Link Here
376
383
377
void
384
void
378
usage(void){
385
usage(void){
379
    fprintf(stderr,"usage: choparp if_name mac_addr [-]addr/mask...\n");
386
    fprintf(stderr,"usage: choparp [-v] if_name mac_addr [-]addr/mask...\n");
380
    exit(-1);
387
    exit(-1);
381
}
388
}
382
389
383
int
390
int
384
main(int argc, char **argv){
391
main(int argc, char **argv){
385
    int	fd;
392
    int	ch, fd;
386
    char *buf, *ifname;
393
    char *buf, *ifname;
387
    struct cidr **targets_tail = &targets, **excludes_tail = &excludes;
394
    struct cidr **targets_tail = &targets, **excludes_tail = &excludes;
388
#define APPEND(LIST,ADDR,MASK) \
395
#define APPEND(LIST,ADDR,MASK) \
Lines 395-407 Link Here
395
    } while (0)
402
    } while (0)
396
    size_t buflen;
403
    size_t buflen;
397
404
398
    if (argc < 4)
405
    while ((ch = getopt(argc, argv, "v")) != -1)
406
        switch (ch) {
407
        case 'v':
408
            verbose++;
409
            break;
410
        default:
411
            usage();
412
        }
413
    argc -= optind;
414
    argv += optind;
415
416
    if (argc < 3)
399
	usage();
417
	usage();
400
418
401
    ifname = argv[1];
419
    ifname = argv[0];
402
    if (setmac(argv[2], ifname))
420
    if (setmac(argv[1], ifname))
403
	usage();
421
	usage();
404
    argv += 3; argc -= 3;
422
    argv += 2; argc -= 2;
405
423
406
    while (argc > 0) {
424
    while (argc > 0) {
407
	u_int32_t addr, mask = ~0;
425
	u_int32_t addr, mask = ~0;
(-)choparp.8 (+4 lines)
Lines 35-40 Link Here
35
.Nd cheap and omitted proxy ARP
35
.Nd cheap and omitted proxy ARP
36
.Sh SYNOPSIS
36
.Sh SYNOPSIS
37
.Nm choparp
37
.Nm choparp
38
.Op Fl v
38
.Ar if_name mac_addr
39
.Ar if_name mac_addr
39
.Oo Fl Oc Ns Ar net_addr Ns
40
.Oo Fl Oc Ns Ar net_addr Ns
40
.Op / Ns Ar net_mask
41
.Op / Ns Ar net_mask
Lines 90-95 Link Here
90
by preceding them with
91
by preceding them with
91
.Fl
92
.Fl
92
.Pp
93
.Pp
94
.Fl v
95
option enables verbose mode, showing warning for invalid ARP packets.
96
.Pp
93
.Nm choparp
97
.Nm choparp
94
uses the Berkeley Packet Filter
98
uses the Berkeley Packet Filter
95
.Nm bpf(4)
99
.Nm bpf(4)

Return to bug 145198