aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorAleksandr Fedorov <afedorov@FreeBSD.org>2022-02-06 12:27:46 +0000
committerAleksandr Fedorov <afedorov@FreeBSD.org>2022-02-06 12:27:46 +0000
commitceaf442ff236dd0dcd303001ff41e6c64a0cfc1f (patch)
tree7031512b9102e1d197ac4982f25955768d709463 /sys/net
parent42cf33dd1a8d6ff2548c8a7fb267879734ddfde3 (diff)
downloadsrc-ceaf442ff236dd0dcd303001ff41e6c64a0cfc1f.tar.gz
src-ceaf442ff236dd0dcd303001ff41e6c64a0cfc1f.zip
if_vxlan(4): Allow netmap_generic to intercept RX packets.
Netmap (generic) intercepts the if_input method to handle RX packets. Call ifp->if_input() instead of netisr_dispatch(). Add stricter check for incoming packet length. This change is very useful with bhyve + vale + if_vxlan. Reviewed by: vmaffione (mentor), kib, np, donner Approved by: vmaffione (mentor), kib, np, donner MFC after: 2 weeks Sponsored by: vstack.com Differential Revision: https://reviews.freebsd.org/D30638
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_vxlan.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c
index b03357c30c08..107a836f91de 100644
--- a/sys/net/if_vxlan.c
+++ b/sys/net/if_vxlan.c
@@ -2814,12 +2814,16 @@ vxlan_input(struct vxlan_socket *vso, uint32_t vni, struct mbuf **m0,
struct ether_header *eh;
int error;
+ m = *m0;
+
+ if (m->m_pkthdr.len < ETHER_HDR_LEN)
+ return (EINVAL);
+
sc = vxlan_socket_lookup_softc(vso, vni);
if (sc == NULL)
return (ENOENT);
ifp = sc->vxl_ifp;
- m = *m0;
eh = mtod(m, struct ether_header *);
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
@@ -2859,8 +2863,9 @@ vxlan_input(struct vxlan_socket *vso, uint32_t vni, struct mbuf **m0,
m->m_pkthdr.csum_data = 0;
}
- error = netisr_dispatch(NETISR_ETHER, m);
+ (*ifp->if_input)(ifp, m);
*m0 = NULL;
+ error = 0;
out:
vxlan_release(sc);