freebsd-dev/sys/net
Mark Johnston d862b165a6 bridge: Add support for emulated netmap mode
if_bridge receives packets via a special interface, if_bridge_input,
rather than by if_input.  Thus, netmap's usual hooking of ifnet routines
does not work as expected.  Instead, modify bridge_input() to pass
packets directly to netmap when it is enabled.  This applies to both
locally delivered packets and forwarded packets.

When a netmap application transmits a packet by writing it to the host
TX ring, the mbuf chain is passed to if_input, which ordinarily points
to ether_input().  However, when transmitting via if_bridge,
bridge_input() needs to see the packet again in order to decide whether
to deliver or forward.  Thus, introduce a new protocol flag,
M_BRIDGE_INJECT, which 1) causes the packet to be passed to
bridge_input() again after Ethernet processing, and 2) avoids passing
the packet back to netmap.  The source MAC address of the packet is used
to determine the original "receiving" interface.

Reviewed by:	vmaffione
MFC after:	2 months
Sponsored by:	Zenarmor
Sponsored by:	OPNsense
Sponsored by:	Klara, Inc.
Differential Revision:	https://reviews.freebsd.org/D38066
2023-04-10 12:14:11 -04:00
..
altq altq: ansify 2023-02-13 18:32:45 +00:00
route netlink: allow exact-match route lookups via RTM_GETROUTE. 2023-04-02 13:47:10 +00:00
bpf_buffer.c
bpf_buffer.h
bpf_filter.c bpf(3): Grammar fix for a source code comment 2022-09-04 17:30:05 +02:00
bpf_jitter.c
bpf_jitter.h
bpf_zerocopy.c
bpf_zerocopy.h
bpf.c net: whack __mips__ leftovers 2023-03-01 11:07:32 +00:00
bpf.h bpf: Add "_if" tap APIs 2023-01-31 15:02:14 -05:00
bpfdesc.h
bridgestp.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
bridgestp.h
debugnet_inet.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
debugnet_int.h
debugnet.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
debugnet.h debugnet: Add ifnet accessor to set debugnet methods 2023-01-24 15:03:35 -05:00
dlt.h libpcap: Update to 1.10.3 2023-03-31 16:02:22 -03:00
ethernet.h bridge: Add support for emulated netmap mode 2023-04-10 12:14:11 -04:00
firewire.h IfAPI: Add l2com accessor for firewire. 2023-01-31 15:02:17 -05:00
ieee8023ad_lacp.c lacp: Use C99 bool for boolean return value 2023-04-01 01:48:36 +08:00
ieee8023ad_lacp.h lacp: Use C99 bool for boolean return value 2023-04-01 01:48:36 +08:00
ieee_oui.h
if_arp.h
if_bridge.c bridge: Add support for emulated netmap mode 2023-04-10 12:14:11 -04:00
if_bridgevar.h bridge: Add support for emulated netmap mode 2023-04-10 12:14:11 -04:00
if_clone.c net: refactor if_clone.c #1 2023-03-15 13:54:22 +00:00
if_clone.h if_clone: add ifc_link_ifp() / ifc_unlink_ifp() to the KPI 2022-09-24 19:42:42 +00:00
if_dead.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_disc.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_dl.h
if_edsc.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_enc.c net: use pfil_mbuf_{in,out} where we always have an mbuf 2023-02-14 10:02:49 -08:00
if_enc.h
if_epair.c if_epair: also remove vlan metadata from mbufs 2023-04-10 15:55:35 +02:00
if_ethersubr.c bridge: Add support for emulated netmap mode 2023-04-10 12:14:11 -04:00
if_fwsubr.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_gif.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_gif.h
if_gre.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_gre.h
if_infiniband.c infiniband: Opt-in for net epoch 2023-04-06 00:08:23 +08:00
if_ipsec.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_ipsec.h
if_lagg.c lagg(4): Tap traffic after protocol processing 2023-04-03 01:01:51 +08:00
if_lagg.h lagg: Various style fixes 2023-03-24 17:55:15 +08:00
if_llatbl.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_llatbl.h netinet6: Fix mbuf leak in NDP 2022-05-31 21:06:14 +00:00
if_llc.h
if_loop.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_me.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_media.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_media.h
if_mib.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_mib.h Add a new leaf to the net.link.generic.ifdata.%d sysctl to retrieve 2006-01-04 12:57:09 +00:00
if_ovpn.c if_ovpn: ovpn_find_peer_by_ip() is unused without INET 2023-02-23 05:56:56 +01:00
if_ovpn.h if_ovpn: implement OVPN_GET_PEER_STATS 2022-12-14 06:48:58 +01:00
if_pflog.h
if_pfsync.h pfsync: prepare code to accommodate AF_INET6 family 2022-11-09 21:06:07 +01:00
if_private.h IfAPI: Add some more accessors 2023-01-31 15:02:17 -05:00
if_stf.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_stf.h
if_tap.h
if_tun.h
if_tuntap.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_types.h Import the WireGuard driver from zx2c4.com. 2022-10-28 13:36:12 -07:00
if_var.h IfAPI: Add iterator to complement if_foreach() 2023-03-23 09:39:26 -04:00
if_vlan_var.h IfAPI: Add some more accessors 2023-01-31 15:02:17 -05:00
if_vlan.c net: unify mtu update code 2023-03-06 15:08:08 +00:00
if_vxlan.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_vxlan.h
if.c ifcapnv: cap_bit in ifcap2_nv_bit_names[] is bit, not index 2023-03-31 02:08:15 +03:00
if.h Revert "ifnet/API: Move the IfAPI from if_var.h to if.h" 2023-01-12 21:29:19 -05:00
ifdi_if.m IfAPI: Explicitly include <net/if_private.h> in netstack 2023-01-31 15:02:16 -05:00
iflib_clone.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
iflib_private.h
iflib.c iflib: Further convert to use IfAPI accessors 2023-03-07 09:47:00 -05:00
iflib.h iflib: Introduce v2 of TX Queue Select Functionality 2022-10-17 14:59:55 -07:00
ifq.c IfAPI: Explicitly include <net/if_private.h> in netstack 2023-01-31 15:02:16 -05:00
ifq.h ifnet/API: Privatize the implementation of the drbr_* APIs 2023-01-31 15:02:14 -05:00
infiniband.h infiniband: Convert BPF handling for IfAPI 2023-03-14 15:51:32 -04:00
mp_ring.c
mp_ring.h net: whack __mips__ leftovers 2023-03-01 11:07:32 +00:00
mppc.h
mppcc.c
mppcd.c
netisr_internal.h
netisr.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
netisr.h netisr: Remove the now-unused NETISR_EPAIR queue index 2023-04-05 11:46:42 -04:00
netmap_legacy.h
netmap_user.h
netmap_virt.h
netmap.h netmap(4): Fix a typo in a source code comment 2022-10-25 14:56:25 +02:00
paravirt.h
pfil.c pf: distinguish forwarding and output cases for pf_refragment6() 2023-03-16 10:59:04 +01:00
pfil.h pf: distinguish forwarding and output cases for pf_refragment6() 2023-03-16 10:59:04 +01:00
pfkeyv2.h ipsec: add support for CHACHA20POLY1305 2022-11-02 14:19:04 +01:00
pfvar.h pf: distinguish forwarding and output cases for pf_refragment6() 2023-03-16 10:59:04 +01:00
ppp_defs.h
radix.c net: constantify radix.c functions 2022-08-01 07:32:40 +00:00
radix.h net: constantify radix.c functions 2022-08-01 07:32:40 +00:00
rndis.h
route.c netlink: add netlink KPI to the kernel by default 2023-03-27 13:55:44 +00:00
route.h netlink: add rtsock-compatible header to use with netlink snl(3). 2023-03-09 14:37:42 +00:00
rss_config.c
rss_config.h
rtsock.c routing: add public rt_is_exportable() version to check if 2023-03-26 08:24:27 +00:00
sff8436.h
sff8472.h
slcompress.c
slcompress.h
toeplitz.c
toeplitz.h
vnet.c vnet: Make vnet_sys[un]init() static 2023-02-22 00:22:23 +08:00
vnet.h vnet: Make vnet_sys[un]init() static 2023-02-22 00:22:23 +08:00