diff options
author | Stuart Henderson <sthen@cvs.openbsd.org> | 2024-11-14 13:47:39 +0000 |
---|---|---|
committer | Stuart Henderson <sthen@cvs.openbsd.org> | 2024-11-14 13:47:39 +0000 |
commit | 939f990d5ee32ad54b293a4671da635c9ad8f7bb (patch) | |
tree | faceacc4413d6a5d460a12cc06ee6c62c221edc2 /sys | |
parent | 3850aff5396d12401f386a395f4eea0dd9608654 (diff) |
revert tun(4) changes for now, breaks in kdump build (TUNSCAP/TIOCEXT clash)
tb@ agrees
Diffstat (limited to 'sys')
-rw-r--r-- | sys/net/if_tun.c | 166 | ||||
-rw-r--r-- | sys/net/if_tun.h | 52 |
2 files changed, 6 insertions, 212 deletions
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c index 2d304d93e3c..432d2b6154e 100644 --- a/sys/net/if_tun.c +++ b/sys/net/if_tun.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_tun.c,v 1.245 2024/11/14 01:51:57 dlg Exp $ */ +/* $OpenBSD: if_tun.c,v 1.246 2024/11/14 13:47:38 sthen Exp $ */ /* $NetBSD: if_tun.c,v 1.24 1996/05/07 02:40:48 thorpej Exp $ */ /* @@ -88,7 +88,6 @@ struct tun_softc { struct sigio_ref sc_sigio; /* async I/O registration */ unsigned int sc_flags; /* misc flags */ #define TUN_DEAD (1 << 16) -#define TUN_HDR (1 << 17) dev_t sc_dev; struct refcnt sc_refs; @@ -105,13 +104,6 @@ int tundebug = TUN_DEBUG; /* Pretend that these IFF flags are changeable by TUNSIFINFO */ #define TUN_IFF_FLAGS (IFF_POINTOPOINT|IFF_MULTICAST|IFF_BROADCAST) -#define TUN_IF_CAPS ( \ - IFCAP_CSUM_IPv4 | \ - IFCAP_CSUM_TCPv4|IFCAP_CSUM_UDPv4|IFCAP_CSUM_TCPv6|IFCAP_CSUM_UDPv6 | \ - IFCAP_VLAN_MTU|IFCAP_VLAN_HWTAGGING|IFCAP_VLAN_HWOFFLOAD | \ - IFCAP_TSOv4|IFCAP_TSOv6|IFCAP_LRO \ -) - void tunattach(int); int tun_dev_open(dev_t, const struct if_clone *, int, struct proc *); @@ -504,11 +496,10 @@ tun_dev_close(dev_t dev, struct proc *p) */ NET_LOCK(); CLR(ifp->if_flags, IFF_UP | IFF_RUNNING); - CLR(ifp->if_capabilities, TUN_IF_CAPS); NET_UNLOCK(); ifq_purge(&ifp->if_snd); - CLR(sc->sc_flags, TUN_ASYNC|TUN_HDR); + CLR(sc->sc_flags, TUN_ASYNC); sigio_free(&sc->sc_sigio); if (!ISSET(sc->sc_flags, TUN_DEAD)) { @@ -636,51 +627,6 @@ tapioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) return (tun_dev_ioctl(dev, cmd, data)); } -static int -tun_set_capabilities(struct tun_softc *sc, const struct tun_capabilities *cap) -{ - if (ISSET(cap->tun_if_capabilities, ~TUN_IF_CAPS)) - return (EINVAL); - - KERNEL_ASSERT_LOCKED(); - SET(sc->sc_flags, TUN_HDR); - - NET_LOCK(); - CLR(sc->sc_if.if_capabilities, TUN_IF_CAPS); - SET(sc->sc_if.if_capabilities, cap->tun_if_capabilities); - NET_UNLOCK(); - return (0); -} - -static int -tun_get_capabilities(struct tun_softc *sc, struct tun_capabilities *cap) -{ - int error = 0; - - NET_LOCK_SHARED(); - if (ISSET(sc->sc_flags, TUN_HDR)) { - cap->tun_if_capabilities = - (sc->sc_if.if_capabilities & TUN_IF_CAPS); - } else - error = ENODEV; - NET_UNLOCK_SHARED(); - - return (error); -} - -static int -tun_del_capabilities(struct tun_softc *sc) -{ - NET_LOCK(); - CLR(sc->sc_if.if_capabilities, TUN_IF_CAPS); - NET_UNLOCK(); - - KERNEL_ASSERT_LOCKED(); - CLR(sc->sc_flags, TUN_HDR); - - return (0); -} - int tun_dev_ioctl(dev_t dev, u_long cmd, void *data) { @@ -732,18 +678,6 @@ tun_dev_ioctl(dev_t dev, u_long cmd, void *data) } break; - case TUNSCAP: - error = tun_set_capabilities(sc, - (const struct tun_capabilities *)data); - break; - case TUNGCAP: - error = tun_get_capabilities(sc, - (struct tun_capabilities *)data); - break; - case TUNDCAP: - error = tun_del_capabilities(sc); - break; - case FIONBIO: break; case FIOASYNC: @@ -811,7 +745,6 @@ tun_dev_read(dev_t dev, struct uio *uio, int ioflag) struct tun_softc *sc; struct ifnet *ifp; struct mbuf *m, *m0; - size_t len; int error = 0; sc = tun_get(dev); @@ -830,46 +763,9 @@ tun_dev_read(dev_t dev, struct uio *uio, int ioflag) bpf_mtap(ifp->if_bpf, m0, BPF_DIRECTION_OUT); #endif - if (ISSET(sc->sc_flags, TUN_HDR)) { - struct tun_hdr th; - - KASSERT(ISSET(m0->m_flags, M_PKTHDR)); - - th.th_flags = 0; - if (ISSET(m0->m_pkthdr.csum_flags, M_IPV4_CSUM_OUT)) - SET(th.th_flags, TUN_H_IPV4_CSUM); - if (ISSET(m0->m_pkthdr.csum_flags, M_TCP_CSUM_OUT)) - SET(th.th_flags, TUN_H_TCP_CSUM); - if (ISSET(m0->m_pkthdr.csum_flags, M_UDP_CSUM_OUT)) - SET(th.th_flags, TUN_H_UDP_CSUM); - if (ISSET(m0->m_pkthdr.csum_flags, M_ICMP_CSUM_OUT)) - SET(th.th_flags, TUN_H_ICMP_CSUM); - - th.th_pad = 0; - - th.th_vtag = 0; - if (ISSET(m0->m_flags, M_VLANTAG)) { - SET(th.th_flags, TUN_H_VTAG); - th.th_vtag = m0->m_pkthdr.ether_vtag; - } - - th.th_mss = 0; - if (ISSET(m0->m_pkthdr.csum_flags, M_TCP_TSO)) { - SET(th.th_flags, TUN_H_TCP_MSS); - th.th_mss = m0->m_pkthdr.ph_mss; - } - - len = ulmin(uio->uio_resid, sizeof(th)); - if (len > 0) { - error = uiomove(&th, len, uio); - if (error != 0) - goto free; - } - } - m = m0; while (uio->uio_resid > 0) { - len = ulmin(uio->uio_resid, m->m_len); + size_t len = ulmin(uio->uio_resid, m->m_len); if (len > 0) { error = uiomove(mtod(m, void *), len, uio); if (error != 0) @@ -881,7 +777,6 @@ tun_dev_read(dev_t dev, struct uio *uio, int ioflag) break; } -free: m_freem(m0); put: @@ -912,8 +807,6 @@ tun_dev_write(dev_t dev, struct uio *uio, int ioflag, int align) struct mbuf *m0; int error = 0; size_t mlen; - size_t hlen; - struct tun_hdr th; sc = tun_get(dev); if (sc == NULL) @@ -921,11 +814,8 @@ tun_dev_write(dev_t dev, struct uio *uio, int ioflag, int align) ifp = &sc->sc_if; - hlen = ifp->if_hdrlen; - if (ISSET(sc->sc_flags, TUN_HDR)) - hlen += sizeof(th); - if (uio->uio_resid < hlen || - uio->uio_resid > (hlen + ifp->if_hardmtu)) { + if (uio->uio_resid < ifp->if_hdrlen || + uio->uio_resid > (ifp->if_hdrlen + ifp->if_hardmtu)) { error = EMSGSIZE; goto put; } @@ -950,52 +840,6 @@ tun_dev_write(dev_t dev, struct uio *uio, int ioflag, int align) m0->m_pkthdr.len = m0->m_len = mlen; m_adj(m0, align); - if (ISSET(sc->sc_flags, TUN_HDR)) { - error = uiomove(&th, sizeof(th), uio); - if (error != 0) - goto drop; - - if (ISSET(th.th_flags, TUN_H_IPV4_CSUM)) { - SET(m0->m_pkthdr.csum_flags, - M_IPV4_CSUM_OUT | M_IPV4_CSUM_IN_OK); - } - - switch (th.th_flags & - (TUN_H_TCP_CSUM|TUN_H_UDP_CSUM|TUN_H_ICMP_CSUM)) { - case 0: - break; - case TUN_H_TCP_CSUM: - SET(m0->m_pkthdr.csum_flags, - M_TCP_CSUM_OUT | M_TCP_CSUM_IN_OK); - break; - case TUN_H_UDP_CSUM: - SET(m0->m_pkthdr.csum_flags, - M_UDP_CSUM_OUT | M_UDP_CSUM_IN_OK); - break; - case TUN_H_ICMP_CSUM: - SET(m0->m_pkthdr.csum_flags, - M_ICMP_CSUM_OUT | M_ICMP_CSUM_IN_OK); - break; - default: - error = EINVAL; - goto drop; - } - - if (ISSET(th.th_flags, TUN_H_VTAG)) { - if (!ISSET(sc->sc_flags, TUN_LAYER2)) { - error = EINVAL; - goto drop; - } - SET(m0->m_flags, M_VLANTAG); - m0->m_pkthdr.ether_vtag = th.th_vtag; - } - - if (ISSET(th.th_flags, TUN_H_TCP_MSS)) { - SET(m0->m_pkthdr.csum_flags, M_TCP_TSO); - m0->m_pkthdr.ph_mss = th.th_mss; - } - } - error = uiomove(mtod(m0, void *), m0->m_len, uio); if (error != 0) goto drop; diff --git a/sys/net/if_tun.h b/sys/net/if_tun.h index 77aa868e794..3e17f0d10b1 100644 --- a/sys/net/if_tun.h +++ b/sys/net/if_tun.h @@ -1,4 +1,4 @@ -/* $OpenBSD: if_tun.h,v 1.16 2024/11/14 01:51:57 dlg Exp $ */ +/* $OpenBSD: if_tun.h,v 1.17 2024/11/14 13:47:38 sthen Exp $ */ /* * Copyright (c) 1988, Julian Onions <Julian.Onions@nexor.co.uk> @@ -31,48 +31,6 @@ #include <sys/ioccom.h> -/* - * tun_hdr is a multiple of 4 bytes, but is built out of uint16_t - * fields. This allows it to sit on a 2 byte boundary in front of - * either IP (and MPLS) or Ethernet packets for tun(4) and tap(4) - * interfaces respectively while maintaining the alignment of their - * payloads. - * - * Userland can request the use of the tun_hdr using the TUNSCAP - * ioctl. This ioctl also allows userland to specify which "offload" - * capabilities it is able to accept in packets it will read from the - * kernel. It is acceptable to enable tun_hdr without enabling any - * interface offload capabilities. - * - * Once the tap_hdr is enabled, userland can write packets into the - * kernel with any of the supported features. tun(4)/tap(4) reads - * will unconditionally handle any features specified on the packet, - * regardless of what capabilities were specified by the TUNSCAP - * ioctl. - * - * The tun_hdr can be read from one interface and written directly - * to another without interpretation or modification. - * - * Use of tun_hdr and the associated capabilities are reset when a - * tun(4)/tap(4) device is closed. - */ - -struct tun_hdr { - uint16_t th_flags; -#define TUN_H_VTAG (1 << 0) /* th_vtag is set */ -#define TUN_H_TCP_MSS (1 << 1) /* Cut TCP frame up by th_mss */ - -#define TUN_H_IPV4_CSUM (1 << 8) -#define TUN_H_TCP_CSUM (1 << 9) -#define TUN_H_UDP_CSUM (1 << 10) -#define TUN_H_ICMP_CSUM (1 << 11) - - uint16_t th_pad; - - uint16_t th_vtag; - uint16_t th_mss; -}; - #define TUN_OPEN 0x0001 #define TUN_INITED 0x0002 #define TUN_RCOLL 0x0004 /* unused */ @@ -110,12 +68,4 @@ struct tuninfo { #define TUNSDEBUG _IOW('t', 94, int) #define TUNGDEBUG _IOR('t', 95, int) -struct tun_capabilities { - uint32_t tun_if_capabilities; /* IFCAP_* from net/if.h */ -}; - -#define TUNSCAP _IOW('t', 96, struct tun_capabilities) -#define TUNGCAP _IOR('t', 96, struct tun_capabilities) -#define TUNDCAP _IO('t', 96) - #endif /* _NET_IF_TUN_H_ */ |