svn commit: r185913 - in user/kmacy/HEAD_fast_multi_xmit/usr.sbin:
arp ndp
Kip Macy
kmacy at FreeBSD.org
Wed Dec 10 22:55:02 PST 2008
Author: kmacy
Date: Thu Dec 11 06:55:01 2008
New Revision: 185913
URL: http://svn.freebsd.org/changeset/base/185913
Log:
merge arpv2 changes to ndp and arp
Modified:
user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c
user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c
Modified: user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c Thu Dec 11 06:54:36 2008 (r185912)
+++ user/kmacy/HEAD_fast_multi_xmit/usr.sbin/arp/arp.c Thu Dec 11 06:55:01 2008 (r185913)
@@ -445,6 +445,18 @@ delete(char *host, int do_proxy)
!(rtm->rtm_flags & RTF_GATEWAY) &&
valid_type(sdl->sdl_type) )
break; /* found it */
+
+ /* Qing
+ * why not just remove the RTF_LLINFO in the above
+ * code instead of another "if", works
+ */
+ if (sdl->sdl_family == AF_LINK &&
+ !(rtm->rtm_flags & RTF_GATEWAY) &&
+ valid_type(sdl->sdl_type) ) {
+ addr->sin_addr.s_addr = dst->sin_addr.s_addr;
+ break;
+ }
+
if (dst->sin_other & SIN_PROXY) {
fprintf(stderr, "delete: cannot locate %s\n",host);
return (1);
@@ -563,15 +575,9 @@ print_entry(struct sockaddr_dl *sdl,
printf(" permanent");
if (addr->sin_other & SIN_PROXY)
printf(" published (proxy only)");
- if (rtm->rtm_addrs & RTA_NETMASK) {
- addr = (struct sockaddr_inarp *)
- (SA_SIZE(sdl) + (char *)sdl);
- if (addr->sin_addr.s_addr == 0xffffffff)
- printf(" published");
- if (addr->sin_len != 8)
- printf("(weird)");
- }
- switch(sdl->sdl_type) {
+ if (rtm->rtm_flags & RTF_ANNOUNCE)
+ printf(" published");
+ switch(sdl->sdl_type) {
case IFT_ETHER:
printf(" [ethernet]");
break;
Modified: user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c Thu Dec 11 06:54:36 2008 (r185912)
+++ user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ndp/ndp.c Thu Dec 11 06:55:01 2008 (r185913)
@@ -114,6 +114,11 @@
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
+#define NEXTADDR(w, s) \
+ if (rtm->rtm_addrs & (w)) { \
+ bcopy((char *)&s, cp, sizeof(s)); cp += sizeof(s);}
+
+
static pid_t pid;
static int nflag;
static int tflag;
@@ -428,7 +433,6 @@ set(argc, argv)
sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin);
if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) {
if (sdl->sdl_family == AF_LINK &&
- (rtm->rtm_flags & RTF_LLINFO) &&
!(rtm->rtm_flags & RTF_GATEWAY)) {
switch (sdl->sdl_type) {
case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023:
@@ -499,6 +503,7 @@ delete(host)
{
struct sockaddr_in6 *sin = &sin_m;
register struct rt_msghdr *rtm = &m_rtmsg.m_rtm;
+ register char *cp = m_rtmsg.m_space;
struct sockaddr_dl *sdl;
struct addrinfo hints, *res;
int gai_error;
@@ -529,7 +534,6 @@ delete(host)
sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin);
if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) {
if (sdl->sdl_family == AF_LINK &&
- (rtm->rtm_flags & RTF_LLINFO) &&
!(rtm->rtm_flags & RTF_GATEWAY)) {
goto delete;
}
@@ -545,6 +549,11 @@ delete:
printf("cannot locate %s\n", host);
return (1);
}
+ /*
+ * need to reinit the field because it has rt_key
+ * but we want the actual address
+ */
+ NEXTADDR(RTA_DST, sin_m);
if (rtmsg(RTM_DELETE) == 0) {
struct sockaddr_in6 s6 = *sin; /* XXX: for safety */
@@ -893,9 +902,6 @@ rtmsg(cmd)
case RTM_GET:
rtm->rtm_addrs |= RTA_DST;
}
-#define NEXTADDR(w, s) \
- if (rtm->rtm_addrs & (w)) { \
- bcopy((char *)&s, cp, sizeof(s)); cp += SA_SIZE(&s);}
NEXTADDR(RTA_DST, sin_m);
NEXTADDR(RTA_GATEWAY, sdl_m);
@@ -1616,3 +1622,5 @@ ts_print(tvp)
(void)printf("%02d:%02d:%02d.%06u ",
s / 3600, (s % 3600) / 60, s % 60, (u_int32_t)tvp->tv_usec);
}
+
+#undef NEXTADDR
More information about the svn-src-user
mailing list