Deleted Added
full compact
ndp.c (173412) ndp.c (186119)
1/* $FreeBSD: head/usr.sbin/ndp/ndp.c 173412 2007-11-07 10:53:41Z kevlo $ */
1/* $FreeBSD: head/usr.sbin/ndp/ndp.c 186119 2008-12-15 06:10:57Z qingli $ */
2/* $KAME: ndp.c,v 1.104 2003/06/27 07:48:39 itojun Exp $ */
3
4/*
5 * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions

--- 99 unchanged lines hidden (view full) ---

109#include <unistd.h>
110#include "gmt2local.h"
111
112/* packing rule for routing socket */
113#define ROUNDUP(a) \
114 ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
115#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
116
2/* $KAME: ndp.c,v 1.104 2003/06/27 07:48:39 itojun Exp $ */
3
4/*
5 * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions

--- 99 unchanged lines hidden (view full) ---

109#include <unistd.h>
110#include "gmt2local.h"
111
112/* packing rule for routing socket */
113#define ROUNDUP(a) \
114 ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
115#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
116
117#define NEXTADDR(w, s) \
118 if (rtm->rtm_addrs & (w)) { \
119 bcopy((char *)&s, cp, sizeof(s)); cp += sizeof(s);}
120
121
117static pid_t pid;
118static int nflag;
119static int tflag;
120static int32_t thiszone; /* time difference with gmt */
121static int s = -1;
122static int repeat = 0;
123
124char ntop_buf[INET6_ADDRSTRLEN]; /* inet_ntop() */

--- 298 unchanged lines hidden (view full) ---

423 if (rtmsg(RTM_GET) < 0) {
424 errx(1, "RTM_GET(%s) failed", host);
425 /* NOTREACHED */
426 }
427 sin = (struct sockaddr_in6 *)(rtm + 1);
428 sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin);
429 if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) {
430 if (sdl->sdl_family == AF_LINK &&
122static pid_t pid;
123static int nflag;
124static int tflag;
125static int32_t thiszone; /* time difference with gmt */
126static int s = -1;
127static int repeat = 0;
128
129char ntop_buf[INET6_ADDRSTRLEN]; /* inet_ntop() */

--- 298 unchanged lines hidden (view full) ---

428 if (rtmsg(RTM_GET) < 0) {
429 errx(1, "RTM_GET(%s) failed", host);
430 /* NOTREACHED */
431 }
432 sin = (struct sockaddr_in6 *)(rtm + 1);
433 sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin);
434 if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) {
435 if (sdl->sdl_family == AF_LINK &&
431 (rtm->rtm_flags & RTF_LLINFO) &&
432 !(rtm->rtm_flags & RTF_GATEWAY)) {
433 switch (sdl->sdl_type) {
434 case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023:
435 case IFT_ISO88024: case IFT_ISO88025:
436 goto overwrite;
437 }
438 }
439 /*

--- 54 unchanged lines hidden (view full) ---

494 * Delete a neighbor cache entry
495 */
496int
497delete(host)
498 char *host;
499{
500 struct sockaddr_in6 *sin = &sin_m;
501 register struct rt_msghdr *rtm = &m_rtmsg.m_rtm;
436 !(rtm->rtm_flags & RTF_GATEWAY)) {
437 switch (sdl->sdl_type) {
438 case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023:
439 case IFT_ISO88024: case IFT_ISO88025:
440 goto overwrite;
441 }
442 }
443 /*

--- 54 unchanged lines hidden (view full) ---

498 * Delete a neighbor cache entry
499 */
500int
501delete(host)
502 char *host;
503{
504 struct sockaddr_in6 *sin = &sin_m;
505 register struct rt_msghdr *rtm = &m_rtmsg.m_rtm;
506 register char *cp = m_rtmsg.m_space;
502 struct sockaddr_dl *sdl;
503 struct addrinfo hints, *res;
504 int gai_error;
505
506 getsocket();
507 sin_m = blank_sin;
508
509 bzero(&hints, sizeof(hints));

--- 14 unchanged lines hidden (view full) ---

524 if (rtmsg(RTM_GET) < 0) {
525 errx(1, "RTM_GET(%s) failed", host);
526 /* NOTREACHED */
527 }
528 sin = (struct sockaddr_in6 *)(rtm + 1);
529 sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin);
530 if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) {
531 if (sdl->sdl_family == AF_LINK &&
507 struct sockaddr_dl *sdl;
508 struct addrinfo hints, *res;
509 int gai_error;
510
511 getsocket();
512 sin_m = blank_sin;
513
514 bzero(&hints, sizeof(hints));

--- 14 unchanged lines hidden (view full) ---

529 if (rtmsg(RTM_GET) < 0) {
530 errx(1, "RTM_GET(%s) failed", host);
531 /* NOTREACHED */
532 }
533 sin = (struct sockaddr_in6 *)(rtm + 1);
534 sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin);
535 if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) {
536 if (sdl->sdl_family == AF_LINK &&
532 (rtm->rtm_flags & RTF_LLINFO) &&
533 !(rtm->rtm_flags & RTF_GATEWAY)) {
534 goto delete;
535 }
536 /*
537 * IPv4 arp command retries with sin_other = SIN_PROXY here.
538 */
539 fprintf(stderr, "delete: cannot delete non-NDP entry\n");
540 return 1;
541 }
542
543delete:
544 if (sdl->sdl_family != AF_LINK) {
545 printf("cannot locate %s\n", host);
546 return (1);
547 }
537 !(rtm->rtm_flags & RTF_GATEWAY)) {
538 goto delete;
539 }
540 /*
541 * IPv4 arp command retries with sin_other = SIN_PROXY here.
542 */
543 fprintf(stderr, "delete: cannot delete non-NDP entry\n");
544 return 1;
545 }
546
547delete:
548 if (sdl->sdl_family != AF_LINK) {
549 printf("cannot locate %s\n", host);
550 return (1);
551 }
552 /*
553 * need to reinit the field because it has rt_key
554 * but we want the actual address
555 */
556 NEXTADDR(RTA_DST, sin_m);
548 if (rtmsg(RTM_DELETE) == 0) {
549 struct sockaddr_in6 s6 = *sin; /* XXX: for safety */
550
551#ifdef __KAME__
552 if (IN6_IS_ADDR_LINKLOCAL(&s6.sin6_addr)) {
553 s6.sin6_scope_id = ntohs(*(u_int16_t *)&s6.sin6_addr.s6_addr[2]);
554 *(u_int16_t *)&s6.sin6_addr.s6_addr[2] = 0;
555 }

--- 42 unchanged lines hidden (view full) ---

598 W_IF, W_IF, "Netif", "Expire", "S", "Flags");
599
600again:;
601 mib[0] = CTL_NET;
602 mib[1] = PF_ROUTE;
603 mib[2] = 0;
604 mib[3] = AF_INET6;
605 mib[4] = NET_RT_FLAGS;
557 if (rtmsg(RTM_DELETE) == 0) {
558 struct sockaddr_in6 s6 = *sin; /* XXX: for safety */
559
560#ifdef __KAME__
561 if (IN6_IS_ADDR_LINKLOCAL(&s6.sin6_addr)) {
562 s6.sin6_scope_id = ntohs(*(u_int16_t *)&s6.sin6_addr.s6_addr[2]);
563 *(u_int16_t *)&s6.sin6_addr.s6_addr[2] = 0;
564 }

--- 42 unchanged lines hidden (view full) ---

607 W_IF, W_IF, "Netif", "Expire", "S", "Flags");
608
609again:;
610 mib[0] = CTL_NET;
611 mib[1] = PF_ROUTE;
612 mib[2] = 0;
613 mib[3] = AF_INET6;
614 mib[4] = NET_RT_FLAGS;
615#ifdef RTF_LLINFO
606 mib[5] = RTF_LLINFO;
616 mib[5] = RTF_LLINFO;
617#else
618 mib[5] = 0;
619#endif
607 if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
608 err(1, "sysctl(PF_ROUTE estimate)");
609 if (needed > 0) {
610 if ((buf = malloc(needed)) == NULL)
611 err(1, "malloc");
612 if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
613 err(1, "sysctl(PF_ROUTE, NET_RT_FLAGS)");
614 lim = buf + needed;

--- 273 unchanged lines hidden (view full) ---

888 rtm->rtm_flags &= ~RTF_HOST;
889 rtm->rtm_addrs |= RTA_NETMASK;
890 }
891#endif
892 /* FALLTHROUGH */
893 case RTM_GET:
894 rtm->rtm_addrs |= RTA_DST;
895 }
620 if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
621 err(1, "sysctl(PF_ROUTE estimate)");
622 if (needed > 0) {
623 if ((buf = malloc(needed)) == NULL)
624 err(1, "malloc");
625 if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
626 err(1, "sysctl(PF_ROUTE, NET_RT_FLAGS)");
627 lim = buf + needed;

--- 273 unchanged lines hidden (view full) ---

901 rtm->rtm_flags &= ~RTF_HOST;
902 rtm->rtm_addrs |= RTA_NETMASK;
903 }
904#endif
905 /* FALLTHROUGH */
906 case RTM_GET:
907 rtm->rtm_addrs |= RTA_DST;
908 }
896#define NEXTADDR(w, s) \
897 if (rtm->rtm_addrs & (w)) { \
898 bcopy((char *)&s, cp, sizeof(s)); cp += SA_SIZE(&s);}
899
900 NEXTADDR(RTA_DST, sin_m);
901 NEXTADDR(RTA_GATEWAY, sdl_m);
902#if 0 /* we don't support ipv6addr/128 type proxying */
903 memset(&so_mask.sin6_addr, 0xff, sizeof(so_mask.sin6_addr));
904 NEXTADDR(RTA_NETMASK, so_mask);
905#endif
906

--- 704 unchanged lines hidden (view full) ---

1611{
1612 int s;
1613
1614 /* Default */
1615 s = (tvp->tv_sec + thiszone) % 86400;
1616 (void)printf("%02d:%02d:%02d.%06u ",
1617 s / 3600, (s % 3600) / 60, s % 60, (u_int32_t)tvp->tv_usec);
1618}
909
910 NEXTADDR(RTA_DST, sin_m);
911 NEXTADDR(RTA_GATEWAY, sdl_m);
912#if 0 /* we don't support ipv6addr/128 type proxying */
913 memset(&so_mask.sin6_addr, 0xff, sizeof(so_mask.sin6_addr));
914 NEXTADDR(RTA_NETMASK, so_mask);
915#endif
916

--- 704 unchanged lines hidden (view full) ---

1621{
1622 int s;
1623
1624 /* Default */
1625 s = (tvp->tv_sec + thiszone) % 86400;
1626 (void)printf("%02d:%02d:%02d.%06u ",
1627 s / 3600, (s % 3600) / 60, s % 60, (u_int32_t)tvp->tv_usec);
1628}
1629
1630#undef NEXTADDR