diff --git a/Dockerfile.fod.centos.new b/Dockerfile.fod.centos.new
index 192f6f50cd8b76b93f2c2beaf20401da9dc260db..e0046230f111bd3a764bf0d13b5eac590eb0525d 100644
--- a/Dockerfile.fod.centos.new
+++ b/Dockerfile.fod.centos.new
@@ -1,5 +1,5 @@
 
-# doc: to build+run: docker build -f Dockerfile.fod.centos.new -t fod.centos . && docker run -ti fod.centos
+# doc: to build+run: docker build -f Dockerfile.fod.centos.new -t fod.centos . && docker run -ti -p 8000:8000 fod.centos
 
 #############################################################################
 #############################################################################
diff --git a/docker-compose/fod_setup_environment-step3.sh b/docker-compose/fod_setup_environment-step3.sh
index 39faa11ab3787ce6c64072c32a87cd64cbb9cc9f..403441d45569358a8cabdba5cb1d08b5c7b6a99d 100755
--- a/docker-compose/fod_setup_environment-step3.sh
+++ b/docker-compose/fod_setup_environment-step3.sh
@@ -6,7 +6,11 @@ else
 	cd /opt/FOD
 	#./install-debian.sh --here --supervisord --setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} --exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
 	#./install-debian.sh --here__with_venv_relative --supervisord --setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} --exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
-	./install-debian.sh --fodproper1 --here__with_venv_relative --supervisord --setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} --exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
+	./install-debian.sh --fodproper1 \
+		--here__with_venv_relative --supervisord \
+		--setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} \
+		--setup_test_rule --setup_test_rule5 testrtr1 10.1.10.11/32 10.2.10.12/32 1 admin \
+		--exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
 	/opt/FOD/venv/bin/python -m pip install exabgp
 	touch /opt/setup_ok
 fi
diff --git a/docker-compose/fod_setup_environment.sh b/docker-compose/fod_setup_environment.sh
index 6eecbf4f6915afee8b5e164d8a3fa3577b6fb727..b2a590f84cfe78c7a346156cfef1fef507c65a8f 100755
--- a/docker-compose/fod_setup_environment.sh
+++ b/docker-compose/fod_setup_environment.sh
@@ -5,7 +5,12 @@ if [ -e /opt/setup_ok ]; then
 else
 	cd /opt/FOD
 	#./install-debian.sh --here --supervisord --setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} --exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
-	./install-debian.sh --here__with_venv_relative --supervisord --setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} --exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
+	#./install-debian.sh --here__with_venv_relative --supervisord --setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} --exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
+	./install-debian.sh \
+		--here__with_venv_relative --supervisord \
+		--setup_admin_user --setup_admin_user5 admin ${ADMIN_PASS} ${ADMIN_EMAIL} ${FOD_ORG} ${FOD_ORG_NET} \
+		--setup_test_rule --setup_test_rule5 testrtr1 10.1.10.11/32 10.2.10.12/32 1 admin \
+		--exabgp ${FOD_EXABGP_LOCAL_ID} ${FOD_EXABGP_LOCAL_IP} ${FOD_EXABGP_LOCAL_AS} ${FOD_EXABGP_REMOTE_ID} ${FOD_EXABGP_REMOTE_IP} ${FOD_EXABGP_REMOTE_AS}
 	/opt/FOD/venv/bin/python -m pip install exabgp
 	touch /opt/setup_ok
 fi
diff --git a/inst/helpers/add_rule.sh b/inst/helpers/add_rule.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3700416ac5777ac3bffad0f0a90927f4bcf0d9bd
--- /dev/null
+++ b/inst/helpers/add_rule.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+source_prefix="$1"
+shift 1
+[ -n "$source_prefix" ] || source_prefix="127.0.0.1/32"
+
+destination_prefix="$1"
+shift 1
+[ -n "$destination_prefix" ] || destination_prefix="0.0.0.0/0"
+
+#
+
+IPprotocolId="$1" #arg
+shift 1
+[ -n "$IPprotocolId" ] || IPprotocolId="1"
+
+#
+
+appliername="$1"
+shift 1
+[ -n "$appliername" ] || appliername="admin"
+
+#
+
+name_prefix="testrtr1"
+
+#
+
+{ cat /dev/fd/5 | ./pythonenv ./manage.py shell; } 5<<EOF
+from flowspec.models import *
+from django.contrib.auth.models import User; 
+applier1 = User.objects.get(username__exact='$appliername');
+
+from django.db.models import Q
+query = Q()
+query |= Q(source='$source_prefix', destination='$destination_prefix', protocol__in=[$IPprotocolId])
+matching_routes = Route.objects.filter(query)
+
+if len(matching_routes)!=0:
+  print("test rule $name_prefix already exists")
+  print("matching_routes="+str(matching_routes))
+else:
+  a = Route(name='$name_prefix', source='$source_prefix', destination='$destination_prefix', status='INACTIVE', applier=applier1)
+  a.save();
+  a.protocol.set([$IPprotocolId])
+  a.save();
+EOF
+
+#
+
+echo "SELECT * from route;" | ./pythonenv ./manage.py dbshell | grep "$name_prefix.*$source_prefix.*$destination_prefix.*$IPprotocolId"
+
diff --git a/install-centos.sh b/install-centos.sh
index ce3922f135e9563db55e08f80be73fd751ceacb6..0946da3e98c90ea1034a93a5c70681977fa18e2e 100755
--- a/install-centos.sh
+++ b/install-centos.sh
@@ -92,6 +92,15 @@ setup_adminuser__peer_ip_prefix1="0.0.0.0/0"
 
 #
 
+setup_testrule=0
+setup_testrule_appliername="$setup_adminuser__username"
+setup_testrule_name_prefix="testrule1"
+setup_testrule_source_prefix="0.0.0.0/0"
+setup_testrule_destination_prefix="127.0.0.1/32"
+setup_testrule_IPprotocolId=1 # ICMP
+
+#
+
 setup_netconf=0
 
 setup_netconf__device=
@@ -305,6 +314,22 @@ while [ $# -gt 0 ]; do
     shift 1 
     setup_adminuser__peer_ip_prefix1="$1"
     shift 1 
+  elif [ $# -ge 1 -a "$1" = "--setup_test_rule" ]; then
+    shift 1
+    setup_test_rule=1
+  elif [ $# -ge 1 -a "$1" = "--setup_test_rule5" ]; then
+    shift 1
+    setup_testrule=1
+    setup_testrule_name_prefix="$1" 
+    shift 1
+    setup_testrule_source_prefix="$1"
+    shift 1
+    setup_testrule_destination_prefix="$1"
+    shift 1
+    setup_testrule_IPprotocolId="$1"
+    shift 1
+    setup_testrule_appliername="$1"
+    shift 1
   elif [ $# -ge 1 -a "$1" = "--netconf" ]; then 
     shift 1
     setup_netconf=1
@@ -813,6 +838,36 @@ if [ "$install_fodproper" = 1 ]; then
  
   fi
 
+  echo "setup_testrule=$setup_testrule" 1>&2
+
+  if [ "$setup_testrule" = 1 ]; then
+    echo "$0: step 2.4.2.1: setup test rule" 1>&2
+
+    (
+      set +e # for now ignore potential errors, especially in case user already exists
+      source ./venv/bin/activate
+{ cat /dev/fd/5 | ./pythonenv ./manage.py shell; } 5<<EOF
+from flowspec.models import *
+from django.contrib.auth.models import User; 
+applier1 = User.objects.get(username__exact='$setup_testrule_appliername');
+
+from django.db.models import Q
+query = Q()
+query |= Q(source='$setup_testrule_source_prefix', destination='$setup_testrule_destination_prefix', protocol__in=[$setup_testrule_IPprotocolId])
+matching_routes = Route.objects.filter(query)
+
+if len(matching_routes)!=0:
+  print("test rule $setup_testrule_name_prefix already exists")
+  print("matching_routes="+str(matching_routes))
+else:
+  a = Route(name='$setup_testrule_name_prefix', source='$setup_testrule_source_prefix', destination='$setup_testrule_destination_prefix', status='INACTIVE', applier=applier1)
+  a.save();
+  a.protocol.set([$setup_testrule_IPprotocolId])
+  a.save();
+EOF
+    )
+  fi
+
   ##
 
   # ./manage.py above may have created debug.log with root permissions:
diff --git a/install-debian.sh b/install-debian.sh
index b684c013020e5c30863d163848c98a7b452dcae2..bbf0d89b147c197cb98eedc4a29ce8072d5becd8 100755
--- a/install-debian.sh
+++ b/install-debian.sh
@@ -98,6 +98,15 @@ setup_adminuser__peer_ip_prefix1="0.0.0.0/0"
 
 #
 
+setup_testrule=0
+setup_testrule_appliername="$setup_adminuser__username"
+setup_testrule_name_prefix="testrule1"
+setup_testrule_source_prefix="0.0.0.0/0"
+setup_testrule_destination_prefix="127.0.0.1/32"
+setup_testrule_IPprotocolId=1 # ICMP
+
+#
+
 setup_netconf=0
 
 setup_netconf__device=
@@ -408,6 +417,22 @@ while [ $# -gt 0 ]; do
     shift 1 
     setup_adminuser__peer_ip_prefix1="$1"
     shift 1 
+  elif [ $# -ge 1 -a "$1" = "--setup_test_rule" ]; then
+    shift 1
+    setup_test_rule=1
+  elif [ $# -ge 1 -a "$1" = "--setup_test_rule5" ]; then
+    shift 1
+    setup_testrule=1
+    setup_testrule_name_prefix="$1" 
+    shift 1
+    setup_testrule_source_prefix="$1"
+    shift 1
+    setup_testrule_destination_prefix="$1"
+    shift 1
+    setup_testrule_IPprotocolId="$1"
+    shift 1
+    setup_testrule_appliername="$1"
+    shift 1
   elif [ $# -ge 1 -a "$1" = "--netconf" ]; then 
     shift 1
     setup_netconf=1
@@ -954,6 +979,36 @@ if [ "$install_fodproper" = 1 ]; then
  
   fi
 
+  echo "setup_testrule=$setup_testrule" 1>&2
+
+  if [ "$setup_testrule" = 1 ]; then
+    echo "$0: step 2.4.2.1: setup test rule" 1>&2
+
+    (
+      set +e # for now ignore potential errors, especially in case user already exists
+      source ./venv/bin/activate
+{ cat /dev/fd/5 | ./pythonenv ./manage.py shell; } 5<<EOF
+from flowspec.models import *
+from django.contrib.auth.models import User; 
+applier1 = User.objects.get(username__exact='$setup_testrule_appliername');
+
+from django.db.models import Q
+query = Q()
+query |= Q(source='$setup_testrule_source_prefix', destination='$setup_testrule_destination_prefix', protocol__in=[$setup_testrule_IPprotocolId])
+matching_routes = Route.objects.filter(query)
+
+if len(matching_routes)!=0:
+  print("test rule $setup_testrule_name_prefix already exists")
+  print("matching_routes="+str(matching_routes))
+else:
+  a = Route(name='$setup_testrule_name_prefix', source='$setup_testrule_source_prefix', destination='$setup_testrule_destination_prefix', status='INACTIVE', applier=applier1)
+  a.save();
+  a.protocol.set([$setup_testrule_IPprotocolId])
+  a.save();
+EOF
+    )
+  fi
+
   ##
 
   # ./manage.py above may have created debug.log with root permissions: