This is a rewrite in haskell of the python netlink module. nix-shell -p 'haskellPackages.ghcWithHoogle(p: with p; [netlink optparse-applicative ])' The netlink module asks for GENL_ADMIN_PERM => The operation requires the CAP_NET_ADMIN privilege sudo setcap cap_net_admin+ep hs/dist-newstyle/build/x86_64-linux/ghc-8.6.3/netlink-pm-1.0.0/x/daemon/build/daemon/daemon # Netlink explanation To fetch TCP diagnostics: Creates a socket with family eNETLINK_INET_DIAG (really NETLINK_SOCK_DIAG) with value 4 AF_INET => netlink family 2 # Compilation With a custom netlink and kernel Compile the custom netlink library with ``` $ cabal configure --enable-library-profiling ``` ``` kernel $ make headers_install $ cabal configure --package-db /home/teto/netlink-hs/dist/package.conf.inplace --extra-include-dirs=/home/teto/mptcp2/build/usr/include -v3 --enable-profiling ``` # Usage Enter the nix-shell shell-test.nix and start the daemon: $ cabal run daemon or $ buildNRun To print a stacktrace cabal run daemon toto -- +RTS -xc In a shell: `$ nix run nixpkgs.iperf -c iperf -s` In another: `$ nix run nixpkgs.iperf -c iperf -c localhost -b 1KiB -t 4 --cport 5500 -4` TODO: ss package sends by default ``` -- #define SS_ALL ((1 << SS_MAX) - 1) -- #define SS_CONN (SS_ALL & ~((1<