Index: /branches/rel_apv_10_4_0_112_gail/usr/src/sys/click/app/qos/qos_dynamic.h
===================================================================
--- /branches/rel_apv_10_4_0_112_gail/usr/src/sys/click/app/qos/qos_dynamic.h	(revision 38053)
+++ /branches/rel_apv_10_4_0_112_gail/usr/src/sys/click/app/qos/qos_dynamic.h	(working copy)
@@ -38,7 +38,8 @@
 
 dyn_qos_session_lookup_t *createNode(void);
 int qos_session_config_kern(void *pcb, char *name, void *pRoot, int32_t nRoot, void *pALTQ, int32_t nALTQ, uint32_t sip, uint16_t sport, uint32_t dip, uint16_t dport);
-void save_dyn_qos_session_config (char *name, char *port, uint32_t sip, uint16_t sport, uint32_t dip, uint16_t dport, char *band, char *dir);
+static int save_dyn_qos_session_config (char *name, char *port, uint32_t sip, uint16_t sport, uint32_t dip, uint16_t dport, char *band, char *dir);
+static int is_duplicate_session_name (char *name);
 void *qos_session_lookup(uint32_t sip, uint16_t sport, uint32_t dip, uint16_t dport, uint8_t direction);
 void display_qos_session_config(void *pcb, dyn_session_qos_conf_t *node, uint64_t prefix);
 int show_qos_session_config(void *pcb, char *name);
Index: /branches/rel_apv_10_4_0_112_gail/usr/src/sys/click/app/qos/qos_dynamic.c
===================================================================
--- /branches/rel_apv_10_4_0_112_gail/usr/src/sys/click/app/qos/qos_dynamic.c	(revision 38053)
+++ /branches/rel_apv_10_4_0_112_gail/usr/src/sys/click/app/qos/qos_dynamic.c	(working copy)
@@ -57,7 +57,7 @@
     struct altq_conf *pALTQConf = NULL;
 
     int s = 0;
-    int i;
+    int i, save_fail;
     uint8_t direction = 0;
     int octet;
 
@@ -120,15 +120,37 @@
     current->qos_session_altq_conf_save = (struct altq_conf *) malloc(sizeof(struct altq_conf), M_QOS, M_NOWAIT | M_ZERO);
     memcpy(current->qos_session_altq_conf_save, pALTQConf, sizeof(struct altq_conf));
 
-    save_dyn_qos_session_config (name, pQoSQRoot->sIfName, sip, sport, dip, dport, pQoSQRoot->sBand, pQoSQRoot->sDir);
+    save_fail = save_dyn_qos_session_config (name, pQoSQRoot->sIfName, sip, sport, dip, dport, pQoSQRoot->sBand, pQoSQRoot->sDir);
+    if (save_fail) {
+        free (current->qos_session_altq_conf_save, M_QOS);
+        free (current->qos_session_q_save, M_QOS);
+        app_printf(pcb, "QoS Session configuration with this name already exists.\n");
+        return (QOS_USERLAND_FAILURE);
+    }
+    return (QOS_SUCCESS);
+}
+
+
+static int is_duplicate_session_name (char *name) {
+    dyn_session_qos_conf_t *dyn_session_conf_run = NULL;
+
+    STAILQ_FOREACH(dyn_session_conf_run, &dyn_session_qos_conf_head, list_entry) {
+        /* check session qos name */
+        if(!strcmp(name, dyn_session_conf_run->name)) {
+            return 1;
+        }
+    }
     return 0;
 }
 
 
-void save_dyn_qos_session_config (char *name, char *port, uint32_t sip, uint16_t sport, uint32_t dip, uint16_t dport, char *band, char *dir) {
+static int save_dyn_qos_session_config (char *name, char *port, uint32_t sip, uint16_t sport, uint32_t dip, uint16_t dport, char *band, char *dir) {
 
     dyn_session_qos_conf_t *dyn_session_qos_data = NULL;
 
+    if (is_duplicate_session_name (name))
+        return 1;
+
     dyn_session_qos_data = (dyn_session_qos_conf_t *)malloc(sizeof(dyn_session_qos_conf_t), M_QOS, M_NOWAIT | M_ZERO);
 
     strcpy (dyn_session_qos_data->name, name);
@@ -143,6 +165,7 @@
 
 
     STAILQ_INSERT_TAIL(&dyn_session_qos_conf_head, dyn_session_qos_data, list_entry);
+    return 0;
 }
 
 
@@ -155,7 +178,7 @@
             continue;
         }
 
-        app_printf(pcb,  "qos dynamic \"%s\" %s %u.%u.%u.%u %u %u.%u.%u.%u %u %s %s\n", 
+        app_printf(pcb,  "qos session \"%s\" %s %u.%u.%u.%u %u %u.%u.%u.%u %u %s %s\n", 
             dyn_qos_conf_run->name, dyn_qos_conf_run->port, 
             (dyn_qos_conf_run->sip) & 0xFF,
             (dyn_qos_conf_run->sip >> 8) & 0xFF,
