Index: /branches/rel_apv_10_7_3/usr/src/sys/click/app/proxy/proxy_errs.h
===================================================================
--- /branches/rel_apv_10_7_3/usr/src/sys/click/app/proxy/proxy_errs.h	(revision 40263)
+++ /branches/rel_apv_10_7_3/usr/src/sys/click/app/proxy/proxy_errs.h	(working copy)
@@ -1441,10 +1441,13 @@
 #define ERR_SLBN_CANNOT_MODIFY    (ERR_SLBN + 136)
 #define ERR_SLBN_CANNOT_MODIFY_MSG "The virtual server or real servers can't be modified."
 
+#define ERR_SLBN_POLICY_IN_USE    (ERR_SLBN + 139)
+#define ERR_SLBN_POLICY_IN_USE_MSG "The policy is currently attached to a virtual service or real service group."
 
 /*********************** BEGIN RTSP PROXY ERROR MESSAGES ******************/
 #define ERR_RTSP_OK                                 (ERR_RTSP + 0)
 #define ERR_RTSP_MALLOC_ERROR                       (ERR_RTSP + 1)
+
 #define ERR_RTSP_RPC_ERROR                          (ERR_RTSP + 2)
 #define ERR_RTSP_CLI_ERROR                          (ERR_RTSP + 3)
 #define ERR_RTSP_SEMATTACH                          (ERR_RTSP + 4)
Index: /branches/rel_apv_10_7_3/usr/src/sys/click/app/slb/slb_vs_policy_kern.c
===================================================================
--- /branches/rel_apv_10_7_3/usr/src/sys/click/app/slb/slb_vs_policy_kern.c	(revision 40263)
+++ /branches/rel_apv_10_7_3/usr/src/sys/click/app/slb/slb_vs_policy_kern.c	(working copy)
@@ -771,6 +771,12 @@
 	policy_p = holder_p->policy_p;
 	vs_p = &slb_vs_table[policy_p->vs_id];
 
+        /*Check if the policy is currently linked to any virtual service or group */
+        if ((vs_p != NULL && !TAILQ_EMPTY(&(vs_p->rtsp_policy))) || SLB_GROUP_ID_VALID(policy_p->gpid)) {
+                SLB_PRINTF((pcb, "Error: Policy \"%s\" is attached to a Virtual service or real service group and cannot be deleted.\n",pname));
+        return ERR_SLBN_POLICY_IN_USE;
+        }
+
 	/* remove policy from policy list in virtual, remove policy holder */
 	TAILQ_REMOVE(&vs_p->rtsp_policy, policy_p, next_policy);
 	TAILQ_REMOVE(&slb_rtsp_policy_holder, holder_p, next_holder);
@@ -8109,6 +8115,12 @@
 	policy_p = holder_p->policy_p;
 	vs_p = &slb_vs_table[policy_p->vs_id];
 
+        /* Check the policy is in use by any virtual service or real service group */
+        if ((vs_p != NULL && !TAILQ_EMPTY(&(vs_p->policy[type]))) || SLB_GROUP_ID_VALID(policy_p->gpid)) {
+                SLB_PRINTF((pcb, "Error: Policy \"%s\" is currently attached to a virtual service or real service group and cannot be deleted.\n", pname));
+                return ERR_SLBN_POLICY_IN_USE;
+        }
+
 	/* remove policy from policy list in virtual, remove policy holder */
 	TAILQ_REMOVE(&(vs_p->policy[type]), policy_p, next_policy);
 	TAILQ_REMOVE(&(slb_policy_holder[type]), holder_p, next_holder);
@@ -8886,6 +8898,13 @@
 	/*bug 26221, don't check licence when remove any rules*/
 
 	vs_p = slb_vs_find_name(name);
+
+        /* Check the policy is attached with any virtual or real service group */
+        if (( SLB_GROUP_ID_VALID(vs_p->default_group_id))) {
+                SLB_PRINTF((pcb, "Error: Default policy for virtual service \"%s\" is active, cannot be deleted.\n",name));
+                return ERR_SLBN_POLICY_IN_USE;
+        }
+
 	if (vs_p != NULL) {
 		if (SLB_GROUP_ID_VALID(vs_p->default_group_id)) {
 			slb_group_vs_link_remove(vs_p->default_group_id, vs_p->vs_id);
@@ -9224,6 +9243,13 @@
 
 
 	vs_p = slb_vs_find_name(vs_name);
+
+        /* Check the DOH policy is not in use with virtual service and group */
+        if (SLB_GROUP_ID_VALID(vs_p->doh_group_id)) {
+                SLB_PRINTF((pcb, "Error: DOH policy for virtual service \"%s\" is currently used and cannot be deleted.\n",                             vs_name));
+                return ERR_SLBN_POLICY_IN_USE;
+        }
+
 	if (vs_p != NULL) {
 		if (SLB_GROUP_ID_VALID(vs_p->doh_group_id)) {
 			slb_group_vs_link_remove(vs_p->doh_group_id, vs_p->vs_id);
@@ -9699,6 +9725,13 @@
 		strlcpy(user_config_name, name, sizeof(user_config_name));
 	}
 	vs_p = slb_vs_find_name(name);
+
+        /* Check the Static policy is linked to this virtual service */
+        if (vs_p->static_memb_p != NULL) {
+                SLB_PRINTF((pcb, "Error: Static policy for virtual service \"%s\" is in use and cannot be deleted.\n", name)                          );
+                return ERR_SLBN_POLICY_IN_USE;
+        }
+
 	if (vs_p != NULL) {
 		if (vs_p->static_memb_p != NULL) {
 			slb_real_vs_link_remove(vs_p->static_memb_p->rid, vs_p->vs_id);
@@ -10101,6 +10134,13 @@
 	/*bug 26221, don't check licence when remove any rules*/
 
 	vs_p = slb_vs_find_name(name);
+    
+        /* Check the backup policy is not currently applied to this virtual service or group */
+        if (SLB_GROUP_ID_VALID(vs_p->backup_group_id)) {
+                SLB_PRINTF((pcb, "Error: Backup policy for VS \"%s\" is active and cannot be deleted.\n", name));
+                return ERR_SLBN_POLICY_IN_USE;
+        }
+
 	if (vs_p != NULL) {
 		if (SLB_GROUP_ID_VALID(vs_p->backup_group_id)) {
 			slb_group_vs_link_remove(vs_p->backup_group_id, vs_p->vs_id);
