summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-11-09 10:11:14 +0000
committermelifaro <melifaro@FreeBSD.org>2015-11-09 10:11:14 +0000
commita0ced91366c8e5d12333b1c0cc8cb100fd209fa2 (patch)
treef2732d013aba948ad902595a535b9c6656df4e44 /sys/net
parentb4eb11ae4d40ddba47d4c0752116e5f9daea5be8 (diff)
downloadFreeBSD-src-a0ced91366c8e5d12333b1c0cc8cb100fd209fa2.zip
FreeBSD-src-a0ced91366c8e5d12333b1c0cc8cb100fd209fa2.tar.gz
Use lladdr_event to propagate gratiotus arp.
Differential Revision: https://reviews.freebsd.org/D4019
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if.c13
-rw-r--r--sys/net/if_vlan.c7
2 files changed, 7 insertions, 13 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 118e63b..74c30d0 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -2512,7 +2512,8 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
return (error);
error = if_setlladdr(ifp,
ifr->ifr_addr.sa_data, ifr->ifr_addr.sa_len);
- EVENTHANDLER_INVOKE(iflladdr_event, ifp);
+ if (error == 0)
+ EVENTHANDLER_INVOKE(iflladdr_event, ifp);
break;
case SIOCAIFGROUP:
@@ -3375,16 +3376,6 @@ if_setlladdr(struct ifnet *ifp, const u_char *lladdr, int len)
ifr.ifr_flagshigh = ifp->if_flags >> 16;
(*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
}
-#ifdef INET
- /*
- * Also send gratuitous ARPs to notify other nodes about
- * the address change.
- */
- TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
- if (ifa->ifa_addr->sa_family == AF_INET)
- arp_ifinit(ifp, ifa);
- }
-#endif
}
return (0);
}
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index 462c907..dc07975 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -523,7 +523,7 @@ vlan_iflladdr(void *arg __unused, struct ifnet *ifp)
#ifndef VLAN_ARRAY
struct ifvlan *next;
#endif
- int i;
+ int error, i;
/*
* Check if it's a trunk interface first of all
@@ -544,8 +544,11 @@ vlan_iflladdr(void *arg __unused, struct ifnet *ifp)
LIST_FOREACH_SAFE(ifv, &ifp->if_vlantrunk->hash[i], ifv_list, next) {
#endif /* VLAN_ARRAY */
VLAN_UNLOCK();
- if_setlladdr(ifv->ifv_ifp, IF_LLADDR(ifp),
+ error = if_setlladdr(ifv->ifv_ifp, IF_LLADDR(ifp),
ifp->if_addrlen);
+ if (error == 0)
+ EVENTHANDLER_INVOKE(iflladdr_event,
+ ifv->ifv_ifp);
VLAN_LOCK();
}
VLAN_UNLOCK();
OpenPOWER on IntegriCloud