- add netmap-libpcap
- add netmap (FreeBSD header files need to be updated with this) - move prototype perl scripts to prototype/ folder - create basic structure for sipcap app (no code yet)
This commit is contained in:
169
netmap/LINUX/Makefile
Normal file
169
netmap/LINUX/Makefile
Normal file
@ -0,0 +1,169 @@
|
||||
# To build external modules, you must have a prebuilt kernel available
|
||||
# that contains the configuration and header files used in the build.
|
||||
# go in the kernel directory and do a
|
||||
# make oldconfig; make scripts; make prepare
|
||||
# or make defconfig; make scripts; make prepare
|
||||
#
|
||||
|
||||
|
||||
|
||||
# list of objects for this module
|
||||
#
|
||||
# objects whose source file is in ../sys/dev/netmap
|
||||
remoteobjs := netmap.o netmap_mem2.o \
|
||||
netmap_generic.o netmap_mbq.o netmap_vale.o \
|
||||
netmap_offloadings.o netmap_pipe.o
|
||||
# all objects
|
||||
netmap_lin-objs := $(remoteobjs) netmap_linux.o
|
||||
|
||||
obj-$(CONFIG_NETMAP) = netmap_lin.o
|
||||
|
||||
ifndef NODRIVERS
|
||||
# list of modules to be built (actually also forcedeth and r8169)
|
||||
MOD_LIST:= CONFIG_E1000=m CONFIG_E1000E=m \
|
||||
CONFIG_IXGBE=m CONFIG_IGB=m \
|
||||
CONFIG_BNX2X=m CONFIG_MLX4=m \
|
||||
CONFIG_VIRTIO_NET=m
|
||||
obj-m += $(O_DRIVERS)
|
||||
GET_DRIVERS := get-drivers
|
||||
else
|
||||
MOD_LIST:=
|
||||
endif
|
||||
|
||||
# DRIVER_SRCS names of the driver sources is only used to
|
||||
# clean files that we copied.
|
||||
DRIVER_SRCS = r8169.c forcedeth.c e1000/ e1000e/ ixgbe/ igb/
|
||||
DRIVER_SRCS += bnx2x/ mellanox/ mlx4/ virtio_net.c
|
||||
|
||||
# _DRV_SUBDIRS contains the subdirs with driver sources.
|
||||
# In old linuxes everything is under drivers/net, newer versions
|
||||
# have them in source/drivers/net/ethernet/$(manufacturer)
|
||||
|
||||
_DRV_SUBDIRS= nvidia realtek intel broadcom . ..
|
||||
|
||||
# The following commands are needed to build the modules as out-of-tree,
|
||||
# in fact the kernel sources path must be specified.
|
||||
|
||||
PWD ?= $(CURDIR)
|
||||
M:=$(PWD)
|
||||
|
||||
# Additional compile flags (e.g. header location)
|
||||
EXTRA_CFLAGS := -I$(M) -I$(M)/../sys -I$(M)/../sys/dev -DCONFIG_NETMAP
|
||||
EXTRA_CFLAGS += -Wno-unused-but-set-variable
|
||||
|
||||
# We use KSRC for the kernel configuration and sources.
|
||||
# If the sources are elsewhere, then use SRC to point to them.
|
||||
KSRC ?= /lib/modules/$(shell uname -r)/build
|
||||
SRC ?= $(KSRC)
|
||||
|
||||
# extract version number.
|
||||
# version.h can be in two different places.
|
||||
# NOTE- A.B.C translates to aXXYY where XXYY are hex
|
||||
LIN_VER = $(shell V=linux/version.h; G=. ; \
|
||||
[ -f $(KSRC)/include/$${V} ] || G=generated/uapi ;\
|
||||
grep LINUX_VERSION_CODE $(KSRC)/include/$${G}/linux/version.h | \
|
||||
awk '{printf "%03x%02x", $$3/256, $$3%256} ')
|
||||
|
||||
# produce a list of applicable patches for this version
|
||||
PATCHES := $(shell \
|
||||
cd $(PWD)/patches; ls diff--* | awk -v v=$(LIN_VER) -F -- \
|
||||
'{ if ((!$$3 || $$3 <= v) && (!$$4 || v < $$4)) print $$0; }')
|
||||
|
||||
# source drivers to copy. Names derived from the patches
|
||||
S_DRIVERS := $(shell \
|
||||
cd $(PWD)/patches; ls diff--* | awk -v v=$(LIN_VER) -F -- \
|
||||
'{ if ((!$$3 || $$3 <= v) && (!$$4 || v < $$4)) print $$2 }' )
|
||||
|
||||
# actual drivers after copy and patch
|
||||
DRIVERS = $(shell [ "$(PATCHES)" != "" ] && ls -dAp \
|
||||
`echo $(PATCHES:diff--%=%) | sed -r 's/--[0-9a-f-]+//g'` 2> /dev/null)
|
||||
|
||||
# Compile v1000 (vhost porting to e1000) only if
|
||||
# the LIN_VER >= 3.8.0, because we don't want to deal
|
||||
# with backporting problems for v1000.
|
||||
ifeq ($(word 1, $(sort 30800 $(LIN_VER))), 30800)
|
||||
CONFIG_V1000:=m
|
||||
else
|
||||
CONFIG_V1000:=n
|
||||
endif
|
||||
|
||||
CONFIG_V1000:=n # force disable by now
|
||||
|
||||
obj-$(CONFIG_V1000) += vhost-port/
|
||||
|
||||
|
||||
all: build
|
||||
|
||||
build: $(GET_DRIVERS)
|
||||
$(MAKE) -C $(KSRC) M=$(PWD) CONFIG_NETMAP=m $(MOD_LIST) \
|
||||
EXTRA_CFLAGS='$(EXTRA_CFLAGS)' \
|
||||
O_DRIVERS="$(DRIVERS:%.c=%.o)" modules
|
||||
@ls -l `find . -name \*.ko`
|
||||
|
||||
|
||||
test:
|
||||
@echo "version $(LIN_VER)"
|
||||
@echo "patches $(PATCHES)"
|
||||
@echo "drivers $(DRIVERS)"
|
||||
|
||||
clean:
|
||||
-@ $(MAKE) -C $(KSRC) M=$(PWD) clean 2> /dev/null
|
||||
-@ (rm -rf $(DRIVER_SRCS) *.orig *.rej *.ko *.o .*.d \
|
||||
.tmp_versions *.mod.c modules.order \
|
||||
Module.symvers .*.cmd get-drivers )
|
||||
|
||||
# the source is not here so we need to specify a dependency
|
||||
define remote_template
|
||||
$$(obj)/$(1): $$(M)/../sys/dev/netmap/$(1:.o=.c)
|
||||
$$(call cmd,cc_o_c)
|
||||
$$(call cmd,modversions)
|
||||
endef
|
||||
$(foreach o,$(remoteobjs),$(eval $(call remote_template,$(o))))
|
||||
|
||||
#-- copy and patch initial files
|
||||
# The location changes depending on the OS version, so ...
|
||||
get-drivers:
|
||||
-@( \
|
||||
if [ -d "$(DRIVER_SRC)" ] ; then \
|
||||
cd "$(DRIVER_SRC)"; s=.; what="`ls -dp *`" ; \
|
||||
else \
|
||||
cd $(SRC); [ -d source ] && cd source ; \
|
||||
cd drivers/net; s=. ; \
|
||||
[ -d ethernet ] && cd ethernet && s="$(_DRV_SUBDIRS)" ; \
|
||||
what="$(S_DRIVERS)" ; \
|
||||
fi ; \
|
||||
echo "LIN_VER $(LIN_VER)" ; \
|
||||
[ "$${what}" = "" ] && echo "-- NO DRIVERS --" && return; \
|
||||
echo "---- Building from `pwd`"; \
|
||||
echo "---- copying $${what} ---" ; \
|
||||
what="$${what} cnic_if.h"; \
|
||||
for i in $$s; do (cd $$i ; \
|
||||
echo " From `pwd` :"; \
|
||||
ls -ldp $${what} 2> /dev/null | sed 's/^/ /' ; \
|
||||
cp -Rp $${what} $(PWD) 2>/dev/null ); \
|
||||
done ; \
|
||||
cd $(PWD) ; \
|
||||
for i in $(PATCHES) ; \
|
||||
do echo "** patch with $$i"; \
|
||||
patch --posix --quiet --force -p1 < patches/$$i; \
|
||||
done ; \
|
||||
echo "Building the following drivers: $(S_DRIVERS)" )
|
||||
@touch get-drivers
|
||||
|
||||
|
||||
test3:
|
||||
@echo "from $(PATCHES) -- to $(MYDRIVERS)"
|
||||
@echo "Drivers is $(DRIVERS)"
|
||||
@echo "Actually have `ls -d $(DRIVERS) 2> /dev/null`"
|
||||
|
||||
# compute the diffs for the original files
|
||||
diffs:
|
||||
@for i in `find . -name \*.orig`; do \
|
||||
diff -urp $$i $${i%.orig} ; \
|
||||
done
|
||||
|
||||
apps:
|
||||
(cd ../examples; $(MAKE))
|
||||
|
||||
+%:
|
||||
@echo $($*)
|
Reference in New Issue
Block a user