Skip to content

Commit

Permalink
Allocate in6_ifextra (ifp->if_afdata[AF_INET6]) only for IPv6-capable
Browse files Browse the repository at this point in the history
interfaces.  This eliminates unnecessary IPv6 processing for non-IPv6
interfaces.

MFC after:	3 days
  • Loading branch information
hrs-allbsd committed Jul 31, 2013
1 parent 8ceb091 commit 64e5ea0
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
7 changes: 7 additions & 0 deletions sys/netinet6/in6.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down
9 changes: 1 addition & 8 deletions sys/netinet6/in6_ifattach.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down
4 changes: 4 additions & 0 deletions sys/netinet6/nd6.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
/*
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 64e5ea0

Please sign in to comment.