diff --git a/test_nfdc/include.sh b/test_nfdc/include.sh
new file mode 100755
index 0000000..5f1c491
--- /dev/null
+++ b/test_nfdc/include.sh
@@ -0,0 +1,120 @@
+#!/usr/bin/env bash
+NUM_OF_PINGS=10
+
+# clean up - kill nfd
+clean_up() {
+  r=$(ssh $CTRL_B "sudo killall nfd" 2>&1)
+  r=$(sudo killall nfd 2>&1)
+
+  if [[ $testCase == 'C' ]]; then
+    r=$(sudo killall nrd 2>&1)
+  fi
+}
+
+start_nfd() {
+  # start nfd on localhost
+  sudo nfd &> $workdir/logs/nfd.log &
+
+  # start nfd on hostB
+  ssh $CTRL_B "mkdir -p $workdir/logs ; sudo nfd &> $workdir/logs/nfd.log &\
+    sleep 2"
+  sleep 2
+}
+
+start_nrd() {
+  # start nfd on localhost
+  sudo nrd &> $workdir/logs/nrd.log &
+
+  sleep 2
+}
+
+
+check_nfd_status_counters() {
+  faceId=$1
+  faceUri=$2
+  counterType=$3
+  threshold=$4
+
+  outCounter=$(nfd-status | grep -iF 'faceid='$faceId' remote='$faceUri | grep -Po $counterType={[0-9]+ | sed 's/'$counterType'={//')
+
+
+  if [[ $outCounter -lt $threshold ]]; then
+    if [[ "out" = $counterType ]]; then
+      echo "nfd-status: out counter of face=$faceId is less than $threshold " >> $testLog
+      echo "nfd-status is:" >> $testLog
+      nfd-status >> $testLog
+      clean_up
+    fi
+    exit 2
+
+  fi
+
+}
+
+# check for the existence of the face
+# param list: $1 - face Id
+#             $2 - face Uri
+check_nfd_status_face_existence() {
+  faceId=$1
+  faceUri=$2
+
+  # check for the existence of the face
+  # First, get the face line
+  # Second, extract the face id attached to the fetched line
+  face=$(nfd-status | grep -iF remote=$faceUri | grep -Po faceid=\[0-9\]+ | sed 's/faceid=//')
+
+  if [[ "none" != $faceId ]]; then
+    if [[ $face != $faceId ]]; then
+      echo "nfd-status: Failed to find face $faceId of $faceUri" >> $testLog
+      echo "nfd-status is:" >> $testLog
+      nfd-status >> $testLog
+      echo "-1"
+    else
+      echo $face
+    fi
+  else
+    echo $face
+  fi
+
+}
+
+
+# This function checks for the existence of a face and a fib entry
+# including nexthop records
+# param list: $1 - face Id
+#             $2 - face Uri
+#             $3 - prefix
+#             $4 - cost
+check_nfd_status_correctness() {
+  faceId=$1
+  faceUri=$2
+  prefix=$3
+  cost=$4
+
+  face=$(check_nfd_status_face_existence $faceId $faceUri)
+  if [[ "-1" = $face ]]; then
+    clean_up
+    exit 2
+  fi
+
+  # check the existence of prefix FIB entry
+  fibEntry=$(nfd-status | grep $prefix)
+  if [[ -z "$fibEntry" ]]; then
+    echo "nfd-status: Failed to find $prefix in FIB table" >> $testLog
+    echo "nfd-status is:" >> $testLog
+    nfd-status >> $testLog
+    clean_up
+    exit 2
+  fi
+
+  # check the correctness of cost on nexthop records
+  fibEntryCost=$(echo $fibEntry | grep -Po 'faceid='$faceId'.\(cost=[0-9]+\)' | sed 's/faceid='$faceId' //' | sed 's/(cost=//' | sed 's/)//')
+
+  if [[ $cost != $fibEntryCost ]]; then
+    echo "nfd-status: nexthop records are incorrect, expected cost is $cost, cost in records $fibEntryCost" >> $testLog
+    echo "nfd-status is:" >> $testLog
+    nfd-status >> $testLog
+    clean_up
+    exit 2
+  fi
+}
\ No newline at end of file
