Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
lib*.a
pmtud
core
tests/venv
pmtud_*.deb
/build
/pmtud_*.deb
9 changes: 0 additions & 9 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -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
20 changes: 20 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -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
94 changes: 19 additions & 75 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,116 +1,60 @@
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
git add RELEASE_NOTES
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 \
Expand Down
13 changes: 13 additions & 0 deletions configure
Original file line number Diff line number Diff line change
@@ -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 $?
1 change: 0 additions & 1 deletion deps/libnetfilter_log
Submodule libnetfilter_log deleted from a1b392
1 change: 0 additions & 1 deletion deps/libnfnetlink
Submodule libnfnetlink deleted from 7633f0
1 change: 0 additions & 1 deletion deps/libpcap
Submodule libpcap deleted from ee5d6f
47 changes: 47 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
@@ -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,
)
1 change: 0 additions & 1 deletion src/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
//
// Copyright (c) 2015 CloudFlare, Inc.

#define _GNU_SOURCE
#include <sched.h>

int taskset(int taskset_cpu)
Expand Down