Allocate in6_ifextra (ifp->if_afdata[AF_INET6]) only for IPv6-capable
interfaces. This eliminates unnecessary IPv6 processing for non-IPv6 interfaces. MFC after: 3 days
This commit is contained in:
parent
fcd9ff2c67
commit
0de0dd9be8
@ -2746,6 +2746,13 @@ in6_domifattach(struct ifnet *ifp)
|
||||
{
|
||||
struct in6_ifextra *ext;
|
||||
|
||||
/* There are not IPv6-capable interfaces. */
|
||||
switch (ifp->if_type) {
|
||||
case IFT_PFLOG:
|
||||
case IFT_PFSYNC:
|
||||
case IFT_USB:
|
||||
return (NULL);
|
||||
}
|
||||
ext = (struct in6_ifextra *)malloc(sizeof(*ext), M_IFADDR, M_WAITOK);
|
||||
bzero(ext, sizeof(*ext));
|
||||
|
||||
|
@ -724,15 +724,8 @@ in6_ifattach(struct ifnet *ifp, struct ifnet *altifp)
|
||||
struct in6_ifaddr *ia;
|
||||
struct in6_addr in6;
|
||||
|
||||
/* some of the interfaces are inherently not IPv6 capable */
|
||||
switch (ifp->if_type) {
|
||||
case IFT_PFLOG:
|
||||
case IFT_PFSYNC:
|
||||
ND_IFINFO(ifp)->flags &= ~ND6_IFF_AUTO_LINKLOCAL;
|
||||
ND_IFINFO(ifp)->flags |= ND6_IFF_IFDISABLED;
|
||||
if (ifp->if_afdata[AF_INET6] == NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* quirks based on interface type
|
||||
*/
|
||||
|
@ -1227,6 +1227,8 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
|
||||
struct nd_prefix *pr;
|
||||
int i = 0, error = 0;
|
||||
|
||||
if (ifp->if_afdata[AF_INET6] == NULL)
|
||||
return (EPFNOSUPPORT);
|
||||
switch (cmd) {
|
||||
case SIOCGDRLST_IN6:
|
||||
/*
|
||||
@ -1801,6 +1803,8 @@ nd6_slowtimo(void *arg)
|
||||
nd6_slowtimo, curvnet);
|
||||
IFNET_RLOCK_NOSLEEP();
|
||||
TAILQ_FOREACH(ifp, &V_ifnet, if_list) {
|
||||
if (ifp->if_afdata[AF_INET6] == NULL)
|
||||
continue;
|
||||
nd6if = ND_IFINFO(ifp);
|
||||
if (nd6if->basereachable && /* already initialized */
|
||||
(nd6if->recalctm -= ND6_SLOWTIMER_INTERVAL) <= 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user