summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-06-15 21:00:32 +0000
committerjlemon <jlemon@FreeBSD.org>2001-06-15 21:00:32 +0000
commit3d3ee69a37239c7be7ecc751a3701c3160744ad6 (patch)
tree788001f84c15a8cb27491aa23b90e3be2cc80fb8
parent6f314caece31aef6e6e71ee3a0b4dc54e77c766d (diff)
downloadFreeBSD-src-3d3ee69a37239c7be7ecc751a3701c3160744ad6.zip
FreeBSD-src-3d3ee69a37239c7be7ecc751a3701c3160744ad6.tar.gz
Do not perform arp send/resolve on an interface marked NOARP.
PR: 25006 MFC after: 2 weeks
-rw-r--r--sys/net/if_ethersubr.c5
-rw-r--r--sys/net/if_fddisubr.c7
-rw-r--r--sys/net/if_iso88025subr.c2
-rw-r--r--sys/netinet/if_ether.c10
4 files changed, 18 insertions, 6 deletions
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index f475f91..5b646b8 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -542,6 +542,11 @@ ether_demux(ifp, eh, m)
break;
case ETHERTYPE_ARP:
+ if (ifp->if_flags & IFF_NOARP) {
+ /* Discard packet if ARP is disabled on interface */
+ m_freem(m);
+ return;
+ }
schednetisr(NETISR_ARP);
inq = &arpintrq;
break;
diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c
index 734eeec..0fc8451 100644
--- a/sys/net/if_fddisubr.c
+++ b/sys/net/if_fddisubr.c
@@ -443,14 +443,11 @@ fddi_input(ifp, fh, m)
break;
case ETHERTYPE_ARP:
-#if !defined(__bsdi__) || _BSDI_VERSION >= 199401
+ if (ifp->if_flags & IFF_NOARP)
+ goto dropanyway;
schednetisr(NETISR_ARP);
inq = &arpintrq;
break;
-#else
- arpinput((struct arpcom *)ifp, m);
- return;
-#endif
#endif
#ifdef INET6
case ETHERTYPE_IPV6:
diff --git a/sys/net/if_iso88025subr.c b/sys/net/if_iso88025subr.c
index a5538e0..2fd7747 100644
--- a/sys/net/if_iso88025subr.c
+++ b/sys/net/if_iso88025subr.c
@@ -473,6 +473,8 @@ iso88025_input(ifp, th, m)
break;
case ETHERTYPE_ARP:
+ if (ifp->if_flags & IFF_NOARP)
+ goto dropanyway;
schednetisr(NETISR_ARP);
inq = &arpintrq;
break;
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index de5d906..8c8f01f 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -368,7 +368,7 @@ arpresolve(ac, rt, m, dst, desten, rt0)
register u_char *desten;
struct rtentry *rt0;
{
- register struct llinfo_arp *la = 0;
+ struct llinfo_arp *la = 0;
struct sockaddr_dl *sdl;
if (m->m_flags & M_BCAST) { /* broadcast */
@@ -404,6 +404,14 @@ arpresolve(ac, rt, m, dst, desten, rt0)
return 1;
}
/*
+ * If ARP is disabled on this interface, stop.
+ * XXX
+ * Probably should not allocate empty llinfo struct if we are
+ * not going to be sending out an arp request.
+ */
+ if (ac->ac_if.if_flags & IFF_NOARP)
+ return (0);
+ /*
* There is an arptab entry, but no ethernet address
* response yet. Replace the held mbuf with this
* latest one.
OpenPOWER on IntegriCloud