diff --git a/.gitignore b/.gitignore index 611c640..a35d983 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ -lib*.a -pmtud -core -tests/venv -pmtud_*.deb +/build +/pmtud_*.deb diff --git a/.gitmodules b/.gitmodules index 9eb2261..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +0,0 @@ -[submodule "deps/libpcap"] - path = deps/libpcap - url = https://github.com/the-tcpdump-group/libpcap.git -[submodule "deps/libnfnetlink"] - path = deps/libnfnetlink - url = git://git.netfilter.org/libnfnetlink.git -[submodule "deps/libnetfilter_log"] - path = deps/libnetfilter_log - url = git://git.netfilter.org/libnetfilter_log.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..ef3b17f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +sudo: false +language: c +dist: trusty +addons: + apt: + packages: + - "python3" + - "python3-pip" +install: + - mkdir ninjadir + - export PATH="`pwd`/ninjadir:${PATH}" + - wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip + - unzip ninja-linux.zip -d ninjadir + - pip3 install --user meson +compiler: + - gcc + - clang +script: + - meson build + - ninja -C build test diff --git a/Makefile b/Makefile index c7eab0a..c57bb1e 100644 --- a/Makefile +++ b/Makefile @@ -1,82 +1,33 @@ -CC ?= clang -LDOPTS += -Wl,-z,now -Wl,-z,relro -pie -COPTSWARN = -Wall -Wextra -Wno-unused-parameter -Wpointer-arith -Werror -COPTSSEC = -D_FORTIFY_SOURCE=2 +pmtud: + ninja -C build -ifeq ($(CC), cc) - CC = clang -endif - -ifeq ($(CC), clang) - COPTSSEC+=-fstack-protector-strong -else - COPTSSEC+=-fstack-protector -endif - -COPTSDEBUG=-g -ggdb -O0 -ifeq ($(BUILD), debugaddress) - COPTSDEBUG=-g -ggdb -O0 -fsanitize=address -fsanitize=undefined -endif -ifeq ($(BUILD), release) - MARCH=-march=corei7 - COPTSDEBUG=-g -ggdb -O3 $(MARCH) -endif - -COPTS+=$(CFLAGS) $(COPTSDEBUG) $(COPTSWARN) $(COPTSSEC) -fPIE \ - -Ideps/libpcap -I deps/libnfnetlink/include -Ideps/libnetfilter_log/include - -all: pmtud - -pmtud: libpcap.a libnetfilter_log.a libnfnetlink.a src/*.c src/*.h Makefile - $(CC) $(COPTS) \ - src/main.c src/utils.c src/net.c src/uevent.c \ - src/hashlimit.c src/csiphash.c src/sched.c \ - src/bitmap.c src/nflog.c \ - libpcap.a libnetfilter_log.a libnfnetlink.a \ - $(LDOPTS) \ - -o pmtud - -libpcap.a: deps/libpcap - (cd deps/libpcap && ./configure && make) - cp deps/libpcap/libpcap.a . - -libnfnetlink.a: deps/libnfnetlink - (cd deps/libnfnetlink && ./autogen.sh && CFLAGS="-fpic" ./configure --enable-static && make) - cp deps/libnfnetlink/src/.libs/libnfnetlink.a . +clean: + ninja -C build clean -libnetfilter_log.a: deps/libnetfilter_log libnfnetlink.a - (cd deps/libnetfilter_log && ./autogen.sh \ - && PKG_CONFIG_PATH=$$PWD/../libnfnetlink CFLAGS="-fpic" ./configure --enable-static \ - && make CPPFLAGS=-I$$PWD/../libnfnetlink/include LDFLAGS=-L$$PWD/../libnfnetlink/src/.libs) - cp deps/libnetfilter_log/src/.libs/libnetfilter_log.a . +install: + DESTDIR=$(DESTDIR) ninja -C build install -clean: - rm -rf pmtud pmtud_*.deb +dist: + ninja -C build dist -distclean: clean - rm -f lib*.a - -(cd deps/libpcap && make clean && make distclean) - -(cd deps/libnfnetlink && make clean && make distclean) - -(cd deps/libnetfilter_log && make clean && make distclean) +check: + ninja -C build test format: - clang-format-3.5 -i src/*.c src/*.h - + clang-format -i src/*.c src/*.h # Release process # --------------- -GITVER := $(shell git describe --tags --always --dirty=-dev) -VERSION := $(shell python -c 'print "$(GITVER)"[1:].partition("-")[0]') -ITERATION := $(shell python -c 'print ("$(GITVER)"[1:].partition("-")[2] or "0")') -NEXT_VERSION := v0.$(shell python -c 'print int("$(GITVER)"[1:].partition("-")[0][2:]) + 1') +PREV_VERSION := $(shell git describe --abbrev=0 --tags) +NEXT_VERSION := v$(shell echo $(PREV_VERSION) | tr -d v | awk '{print $$1+0.1}') .PHONY: release release: - @echo "[*] Curr version: $(VERSION)-$(ITERATION)" + @echo "[*] Curr version: $(shell git describe --tags)" @echo "[*] Next version: $(NEXT_VERSION)" echo "$(NEXT_VERSION) (`date '+%Y%m%d-%H%M'`)" > RELEASE_NOTES.tmp - git log --reverse --date=short --format="- %ad %s" tags/v$(VERSION)..HEAD >> RELEASE_NOTES.tmp + git log --reverse --date=short --format="- %ad %s" tags/$(PREV_VERSION)..HEAD >> RELEASE_NOTES.tmp echo "" >> RELEASE_NOTES.tmp cat RELEASE_NOTES >> RELEASE_NOTES.tmp mv RELEASE_NOTES.tmp RELEASE_NOTES @@ -84,33 +35,26 @@ release: git commit -m "Release $(NEXT_VERSION)" git tag $(NEXT_VERSION) @echo "[*] To push the release run:" - @echo "git push origin master; git push origin $(NEXT_VERSION)" + @echo "git push origin master && git push origin $(NEXT_VERSION)" # Build process # ------------- BIN_PREFIX ?= /usr/local/bin PACKAGE_ROOT := $(shell pwd)/tmp/packaging - .PHONY: print-builddeps cf-package -CFDEPENDENCIES = python flex bison gcc make pkg-config +CFDEPENDENCIES = gcc make pkg-config meson print-builddeps: @echo $(CFDEPENDENCIES) $(DEPENDENCIES) - cf-package: - @echo "[*] resetting submodules" - git submodule sync --quiet - git submodule update --init --recursive --quiet @echo "[*] rebuilding" -$(MAKE) clean - -$(MAKE) distclean - $(MAKE) pmtud BUILD=release CC=gcc + $(MAKE) pmtud -mkdir -p $(PACKAGE_ROOT)/$(BIN_PREFIX) - cp pmtud $(PACKAGE_ROOT)/$(BIN_PREFIX) - + cp build/pmtud $(PACKAGE_ROOT)/$(BIN_PREFIX) fakeroot fpm -C $(PACKAGE_ROOT) \ -s dir \ -t deb \ diff --git a/configure b/configure new file mode 100755 index 0000000..4777900 --- /dev/null +++ b/configure @@ -0,0 +1,13 @@ +#!/bin/sh + +if [ $# -ne 0 ]; then + meson configure build + echo '' + echo 'Configuration can be changed like this:' + echo ' meson configure build -Dprefix=/tmp/foobar' + echo ' More info: http://mesonbuild.com/Configuring-a-build-directory.html' + # See also: http://mesonbuild.com/howtox.html + exit 1 +fi +meson build +exit $? diff --git a/deps/libnetfilter_log b/deps/libnetfilter_log deleted file mode 160000 index a1b392b..0000000 --- a/deps/libnetfilter_log +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a1b392b4156db984ab2b695a4a70d113f70cb9b8 diff --git a/deps/libnfnetlink b/deps/libnfnetlink deleted file mode 160000 index 7633f0c..0000000 --- a/deps/libnfnetlink +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7633f0c1679988ad18e4de9afc8a277510298139 diff --git a/deps/libpcap b/deps/libpcap deleted file mode 160000 index ee5d6f1..0000000 --- a/deps/libpcap +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ee5d6f1375b3fc74dcb927ab3d2db8125f956b39 diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..9c71602 --- /dev/null +++ b/meson.build @@ -0,0 +1,47 @@ +project('outlier', 'c', + default_options : [ + 'c_std=c99', + 'buildtype=debugoptimized', + 'warning_level=1', + ], + license : 'BSD 3-clause', + version : 'v0.6', + meson_version : '>= 0.44.0', +) + +conf = configuration_data() +conf.set('_GNU_SOURCE', 1) +config_h = configure_file( + output : 'config.h', + configuration : conf) + +add_project_arguments('-include', 'config.h', language : 'c') + +pmtud_sources = ''' + src/bitmap.c + src/csiphash.c + src/hashlimit.c + src/hashlimit.h + src/main.c + src/net.c + src/nflog.c + src/pmtud.h + src/sched.c + src/uevent.c + src/uevent.h + src/utils.c +'''.split() + +libpcap_dep = dependency('pcap') +libnfnetlink_dep = dependency('libnfnetlink') +libnetfilter_log_dep = dependency('libnetfilter_log') + +executable('pmtud', + pmtud_sources, + dependencies: [ + libpcap_dep, + libnfnetlink_dep, + libnetfilter_log_dep, + ], + install: true, +) diff --git a/src/sched.c b/src/sched.c index 213b0e7..7752371 100644 --- a/src/sched.c +++ b/src/sched.c @@ -2,7 +2,6 @@ // // Copyright (c) 2015 CloudFlare, Inc. -#define _GNU_SOURCE #include int taskset(int taskset_cpu)