![Alexei Starovoitov](/assets/img/avatar_default.png)
bpfilter.ko consists of bpfilter_kern.c (normal kernel module code) and user mode helper code that is embedded into bpfilter.ko The steps to build bpfilter.ko are the following: - main.c is compiled by HOSTCC into the bpfilter_umh elf executable file - with quite a bit of objcopy and Makefile magic the bpfilter_umh elf file is converted into bpfilter_umh.o object file with _binary_net_bpfilter_bpfilter_umh_start and _end symbols Example: $ nm ./bld_x64/net/bpfilter/bpfilter_umh.o 0000000000004cf8 T _binary_net_bpfilter_bpfilter_umh_end 0000000000004cf8 A _binary_net_bpfilter_bpfilter_umh_size 0000000000000000 T _binary_net_bpfilter_bpfilter_umh_start - bpfilter_umh.o and bpfilter_kern.o are linked together into bpfilter.ko bpfilter_kern.c is a normal kernel module code that calls the fork_usermode_blob() helper to execute part of its own data as a user mode process. Notice that _binary_net_bpfilter_bpfilter_umh_start - end is placed into .init.rodata section, so it's freed as soon as __init function of bpfilter.ko is finished. As part of __init the bpfilter.ko does first request/reply action via two unix pipe provided by fork_usermode_blob() helper to make sure that umh is healthy. If not it will kill it via pid. Later bpfilter_process_sockopt() will be called from bpfilter hooks in get/setsockopt() to pass iptable commands into umh via bpfilter.ko If admin does 'rmmod bpfilter' the __exit code bpfilter.ko will kill umh as well. Signed-off-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
90 lines
2.5 KiB
Makefile
90 lines
2.5 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Makefile for the linux networking.
|
|
#
|
|
# 2 Sep 2000, Christoph Hellwig <hch@infradead.org>
|
|
# Rewritten to use lists instead of if-statements.
|
|
#
|
|
|
|
obj-$(CONFIG_NET) := socket.o core/
|
|
|
|
tmp-$(CONFIG_COMPAT) := compat.o
|
|
obj-$(CONFIG_NET) += $(tmp-y)
|
|
|
|
# LLC has to be linked before the files in net/802/
|
|
obj-$(CONFIG_LLC) += llc/
|
|
obj-$(CONFIG_NET) += ethernet/ 802/ sched/ netlink/ bpf/
|
|
obj-$(CONFIG_NETFILTER) += netfilter/
|
|
obj-$(CONFIG_INET) += ipv4/
|
|
obj-$(CONFIG_TLS) += tls/
|
|
obj-$(CONFIG_XFRM) += xfrm/
|
|
obj-$(CONFIG_UNIX) += unix/
|
|
obj-$(CONFIG_NET) += ipv6/
|
|
obj-$(CONFIG_BPFILTER) += bpfilter/
|
|
obj-$(CONFIG_PACKET) += packet/
|
|
obj-$(CONFIG_NET_KEY) += key/
|
|
obj-$(CONFIG_BRIDGE) += bridge/
|
|
obj-$(CONFIG_NET_DSA) += dsa/
|
|
obj-$(CONFIG_ATALK) += appletalk/
|
|
obj-$(CONFIG_X25) += x25/
|
|
obj-$(CONFIG_LAPB) += lapb/
|
|
obj-$(CONFIG_NETROM) += netrom/
|
|
obj-$(CONFIG_ROSE) += rose/
|
|
obj-$(CONFIG_AX25) += ax25/
|
|
obj-$(CONFIG_CAN) += can/
|
|
obj-$(CONFIG_BT) += bluetooth/
|
|
obj-$(CONFIG_SUNRPC) += sunrpc/
|
|
obj-$(CONFIG_AF_RXRPC) += rxrpc/
|
|
obj-$(CONFIG_AF_KCM) += kcm/
|
|
obj-$(CONFIG_STREAM_PARSER) += strparser/
|
|
obj-$(CONFIG_ATM) += atm/
|
|
obj-$(CONFIG_L2TP) += l2tp/
|
|
obj-$(CONFIG_DECNET) += decnet/
|
|
obj-$(CONFIG_PHONET) += phonet/
|
|
ifneq ($(CONFIG_VLAN_8021Q),)
|
|
obj-y += 8021q/
|
|
endif
|
|
obj-$(CONFIG_IP_DCCP) += dccp/
|
|
obj-$(CONFIG_IP_SCTP) += sctp/
|
|
obj-$(CONFIG_RDS) += rds/
|
|
obj-$(CONFIG_WIRELESS) += wireless/
|
|
obj-$(CONFIG_MAC80211) += mac80211/
|
|
obj-$(CONFIG_TIPC) += tipc/
|
|
obj-$(CONFIG_NETLABEL) += netlabel/
|
|
obj-$(CONFIG_IUCV) += iucv/
|
|
obj-$(CONFIG_SMC) += smc/
|
|
obj-$(CONFIG_RFKILL) += rfkill/
|
|
obj-$(CONFIG_NET_9P) += 9p/
|
|
obj-$(CONFIG_CAIF) += caif/
|
|
ifneq ($(CONFIG_DCB),)
|
|
obj-y += dcb/
|
|
endif
|
|
obj-$(CONFIG_6LOWPAN) += 6lowpan/
|
|
obj-$(CONFIG_IEEE802154) += ieee802154/
|
|
obj-$(CONFIG_MAC802154) += mac802154/
|
|
|
|
ifeq ($(CONFIG_NET),y)
|
|
obj-$(CONFIG_SYSCTL) += sysctl_net.o
|
|
endif
|
|
obj-$(CONFIG_WIMAX) += wimax/
|
|
obj-$(CONFIG_DNS_RESOLVER) += dns_resolver/
|
|
obj-$(CONFIG_CEPH_LIB) += ceph/
|
|
obj-$(CONFIG_BATMAN_ADV) += batman-adv/
|
|
obj-$(CONFIG_NFC) += nfc/
|
|
obj-$(CONFIG_PSAMPLE) += psample/
|
|
obj-$(CONFIG_NET_IFE) += ife/
|
|
obj-$(CONFIG_OPENVSWITCH) += openvswitch/
|
|
obj-$(CONFIG_VSOCKETS) += vmw_vsock/
|
|
obj-$(CONFIG_MPLS) += mpls/
|
|
obj-$(CONFIG_NET_NSH) += nsh/
|
|
obj-$(CONFIG_HSR) += hsr/
|
|
ifneq ($(CONFIG_NET_SWITCHDEV),)
|
|
obj-y += switchdev/
|
|
endif
|
|
ifneq ($(CONFIG_NET_L3_MASTER_DEV),)
|
|
obj-y += l3mdev/
|
|
endif
|
|
obj-$(CONFIG_QRTR) += qrtr/
|
|
obj-$(CONFIG_NET_NCSI) += ncsi/
|
|
obj-$(CONFIG_XDP_SOCKETS) += xdp/
|