High performance implementation of the Tapdance decoy routing design.
These instructions are for the standard build, which includes drivers for Intel i40e- and ixgbe-based NICs.
- Install Ubuntu 16.04.1 for amd64
- Run
sudo apt-get update
- Clone this repo into
$HOME/tapdance
- In
$HOME/tapdance
, run./scripts/tapdance-prereqs.sh
(NOT sudo/as root) - In
$HOME/tapdance
, run./scripts/tapdance-build.sh
(NOT sudo/as root) - In
$HOME/tapdance/libtapdance
, run./genkey
(unless you already have a keypair you're planning to use for this station). - Copy the generated 'pubkey' file to your client:
gotapdance/assets/station_pubkey
- Installing the PF_RING zero-copy license can wait until you confirm everything is working properly. Even without the license, you can use PF_RING-ZC-enabled programs for 5 minutes at a time.
- Double-check that the interface for the tunneled traffic is running at the expected rate (1Gb or better, usually)
Do this after the above station installation process, as well as after every reboot.
- In
$HOME/tapdance
, runsudo ./startup.sh
. The output should include the following instructions on running the station.
Use the service
interface, as described in sysvinit/README
. Note that you
might need to wait a few seconds after starting zbalance before you start
tapdance, to let zbalance come fully online.
If you want to recompile before running:
- In
$HOME/tapdance
, run./scripts/tapdance-build.sh
(NOT sudo/as root)
Run these three programs in separate screens, in this order.
- In
$HOME/tapdance/pfring-framework/userland/examples_zc
, runsudo ./zbalance_ipc -i zc:$INTERFACE -c 99 -n 4 -m 1 -g 1
. - (Optional) In
$HOME/tapdance/gobbler
, run./gobbler
after building withgo build gobbler.go
. If gobbler isn't run, the station will still work; the Gobbler's purpose is to collect and report statistics. - In
$HOME/tapdance/pfring-framework/userland/examples
, runsudo RUST_BACKTRACE=1 ./zc_tapdance -c 99 -n 4 -K /path/to/privkey
.
The -n and -c arguments are number of processes to split over, and cluster ID. You can safely change them (-n must be no more than number of logical CPU cores on the host machine), but you must give zbalance_ipc and zc_tapdance the same values.
- Go to this page: https://shop.ntop.org/cart.php
- Scroll down to the PF_RING section, and find the 10/40 Gbit PF_RING ZC Intel [Linux] driver, and on the right side of the table put as many licenses as you need. (The price was 149.95 euros at the time of writing)
- Scroll down the bottom of the page and click on the "go to next page" button
- From this point on it's just filling out info and paying, which should be straightforward
After completing the previous steps, you should have an email from an ntop employee, giving you an OrderId.
- Try both tap interfaces (their names in ifconfig should look something like
enp5s0f0 and enp5s0f1) to figure out which one is getting traffic. Get the
traffic-getting one's MAC address. To check for traffic, you can try running
our station program, or even just
./zcount -i theIFname
- In examples_zc, run
./zcount -h
to get PF_RING ZC version. - Go to http://shop.ntop.org/mkzclicense/
- Fill in the MAC address, OrderId, and PF_RING ZC Version. Select Product Family PF_RING ZC 10/40/100 Gbit [Intel].
- Click the "Create PF_RING License" button.
- Follow the next page's instructions. (After putting the license key string
in the MAC-address-named file, you're all set - don't even need to reboot!)
You can verify the registration with
sudo ./zcount -C -i zc:enp5s0f0
If you have previously configured the station for ZC operation, you must reboot in order to run non-ZC! (You can run non-ZC and then switch to ZC without rebooting).
To run the non-zero-copy multi-process TapDance station, follow the installation and setup instructions as above, but:
- Rather than
sudo ./startup.sh
, runsudo ./startup.sh --nozerocopy
. - Rather than
./scripts/tapdance-build.sh
, run./scripts/tapdance-build.sh --nozerocopy
. - When running the station, you do not need
zbalance_ipc
at all. - Run the station with
sudo RUST_BACKTRACE=1 ./tapdance -i $INTERFACE -c 7 -o 0 -n 4 -K /path/to/privkey
.
The gobbler remains the same. Running tapdance-prereqs.sh remains the same. n and c are the same as in the ZC version; -o is core id offset. (So, -o 3 -n 4 would use cores 3,4,5,6).
This is the TapDance station code. You do not need this to be a user of TapDance; for that, you will need the client.