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; |