diff options
| author | Qing Li <qingli@FreeBSD.org> | 2006-08-01 17:28:10 +0000 |
|---|---|---|
| committer | Qing Li <qingli@FreeBSD.org> | 2006-08-01 17:28:10 +0000 |
| commit | 0d024885b91870c3fb65e4059cfdd4b4294d0c78 (patch) | |
| tree | bd257e3d78eec56455a22902e0f3111b453f5f45 /sys | |
| parent | 0fc4974f794cf1171bbff199648a11b1feff748e (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/net/if_vlan.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c index 34ef7eef4078..55af9c9c67c4 100644 --- a/sys/net/if_vlan.c +++ b/sys/net/if_vlan.c @@ -917,21 +917,15 @@ vlan_input(struct ifnet *ifp, struct mbuf *m) __func__, ntohs(evl->evl_encap_proto))); tag = EVL_VLANOFTAG(ntohs(evl->evl_tag)); - - /* - * Restore the original ethertype. We'll remove - * the encapsulation after we've found the vlan - * interface corresponding to the tag. - */ - evl->evl_encap_proto = evl->evl_proto; break; default: - tag = (uint16_t) -1; -#ifdef INVARIANTS - panic("%s: unsupported if_type (%u)", - __func__, ifp->if_type); +#ifdef DEBUG + /* XXX rate limit? */ + if_printf(ifp, "unsupported if_type %u", ifp->if_type); #endif - break; + m_freem(m); + ifp->if_noproto++; /* XXX? */ + return; } } @@ -952,12 +946,12 @@ vlan_input(struct ifnet *ifp, struct mbuf *m) if (mtag == NULL) { /* * Packet had an in-line encapsulation header; - * remove it. The original header has already - * been fixed up above. + * remove it. Note that we leave the type field + * unchanged; we only copy up the mac addresses. */ bcopy(mtod(m, caddr_t), mtod(m, caddr_t) + ETHER_VLAN_ENCAP_LEN, - ETHER_HDR_LEN); + ETHER_HDR_LEN - ETHER_TYPE_LEN); m_adj(m, ETHER_VLAN_ENCAP_LEN); } |
