packages feed

mptcp-pm-0.0.1: README.md

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<<SS_LISTEN)|(1<<SS_CLOSE)|(1<<SS_TIME_WAIT)|(1<<SS_SYN_RECV)))
-- #define TIPC_SS_CONN ((1<<SS_ESTABLISHED)|(1<<SS_LISTEN)|(1<<SS_CLOSE))
```
- [ ] write wordToEnums function, especially to fix getSockDiagRequestHeader
(with bitset package once it's fixed)

# Testsuite

# BUGS

- conversion of IDiagExt is bad everywhere ? req.r.idiag_ext |= (1<<(INET_DIAG_INFO-1));
- we need to request more states

# TODO 
- pass local/server IPs as commands to the PM ?
- generate completion scripts via --zsh-completion-script
- to get kernel ifindex: cat /sys/class/net/lo/ifindex