Various improvements to P4 dev env
- Better handling of BMv2 crashes in bmv2.py (with watchdog and logging)
- bm-* commands for easy access to BMv2 log, CLI, etc
Change-Id: I1c79acda641171566d8e1162442c7f377bb273fe
diff --git a/tools/dev/p4vm/bm-commands.sh b/tools/dev/p4vm/bm-commands.sh
new file mode 100644
index 0000000..ee96f22
--- /dev/null
+++ b/tools/dev/p4vm/bm-commands.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+BUILD_DIR=~/p4tools
+
+export BMV2_PATH=${BUILD_DIR}/bmv2
+export P4RUNTIME_PATH=${BUILD_DIR}/p4runtime
+
+bm-cli () {
+ if [ -z "$1" ]; then
+ echo "No argument supplied. Usage: bm-cli <BMV2 DEVICE ID>"
+ return
+ fi
+ tport=$(head -n 1 /tmp/bmv2-$1-thrift-port)
+ echo "Starting CLI for BMv2 instance $1 (Thrift port $tport)..."
+ sudo ${BMV2_PATH}/tools/runtime_CLI.py --thrift-port ${tport} ${@:2}
+}
+
+bm-dbg () {
+ if [ -z "$1" ]; then
+ echo "No argument supplied. Usage: bm-dbg <BMV2 DEVICE ID>"
+ return
+ fi
+ tport=$(head -n 1 /tmp/bmv2-$1-thrift-port)
+ echo "Starting debugger for BMv2 instance $1 (Thrift port $tport)..."
+ sudo ${BMV2_PATH}/tools/p4dbg.py --thrift-port ${tport} ${@:2}
+}
+
+bm-nmsg () {
+ if [ -z "$1" ]; then
+ echo "No argument supplied. Usage: bm-nmsg <BMV2 DEVICE ID>"
+ return
+ fi
+ tport=$(head -n 1 /tmp/bmv2-$1-thrift-port)
+ echo "Starting nanomsg event listener for BMv2 instance $1 (Thrift port $tport)..."
+ sudo ${BMV2_PATH}/tools/nanomsg_client.py --thrift-port ${tport} ${@:2}
+}
+
+bm-log () {
+ if [ -z "$1" ]; then
+ echo "No argument supplied. Usage: bm-log <BMV2 DEVICE ID>"
+ return
+ fi
+ echo "Showing log for BMv2 instance $1..."
+ echo "---"
+ tail -f /tmp/bmv2-$1-log
+}
+
+bm-sysrepo-reset () {
+ echo "Resetting sysrepo data store..."
+ sudo rm -rf /etc/sysrepo/data/*
+ sudo ${P4RUNTIME_PATH}/proto/sysrepo/install_yangs.sh
+}