First stab at BNG support in fabric.p4

This implementation is derived from Deutsche Telekom contribution:
https://github.com/opencord/p4se

It supports basic upstream and downstream termination based on double
VLAN tags and PPPoE, including counters and downstream metering.

Change-Id: I940959f2338d7319654cf665f6cfe2de7200616b
diff --git a/pipelines/fabric/src/main/resources/bmv2-compile.sh b/pipelines/fabric/src/main/resources/bmv2-compile.sh
index d9ea018..f77e287 100755
--- a/pipelines/fabric/src/main/resources/bmv2-compile.sh
+++ b/pipelines/fabric/src/main/resources/bmv2-compile.sh
@@ -7,23 +7,38 @@
 
 PROFILE=$1
 OTHER_PP_FLAGS=$2
-OUT_DIR=./p4c-out/${PROFILE}/bmv2/default
 
+SRC_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+OUT_DIR=${SRC_DIR}/p4c-out/${PROFILE}/bmv2/default
 
 mkdir -p ${OUT_DIR}
 mkdir -p ${OUT_DIR}/graphs
 
 echo
 echo "## Compiling profile ${PROFILE} in ${OUT_DIR}..."
-(set -x; p4c-bm2-ss --arch v1model \
-        -o ${OUT_DIR}/bmv2.json \
+
+dockerImage=ccasconeonf/p4c
+dockerRun="docker run --rm -w ${SRC_DIR} -v ${SRC_DIR}:${SRC_DIR} -v ${OUT_DIR}:${OUT_DIR} ${dockerImage}"
+
+# Generate preprocessed P4 source (for debugging).
+(set -x; ${dockerRun} p4c-bm2-ss --arch v1model \
         ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} \
-        --p4runtime-files ${OUT_DIR}/p4info.txt \
-        fabric.p4)
-(set -x; p4c-graphs ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} --graphs-dir ${OUT_DIR}/graphs fabric.p4)
+        --pp ${OUT_DIR}/_pp.p4 fabric.p4)
+
+# Generate BMv2 JSON and P4Info.
+(set -x; ${dockerRun} p4c-bm2-ss --arch v1model -o ${OUT_DIR}/bmv2.json \
+        ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} \
+        --p4runtime-files ${OUT_DIR}/p4info.txt fabric.p4)
+
+# Graphs.
+(set -x; ${dockerRun} p4c-graphs ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} \
+        --graphs-dir ${OUT_DIR}/graphs fabric.p4)
+
+# Convert .dot graphs to PDFs.
 for f in ${OUT_DIR}/graphs/*.dot; do
-    (set -x; dot -Tpdf ${f} > ${f}.pdf)
+    (set -x; ${dockerRun} dot -Tpdf ${f} > ${f}.pdf)
     rm -f ${f}
 done
 
+# CPU port.
 (set -x; echo ${BMV2_CPU_PORT} > ${OUT_DIR}/cpu_port.txt)