*** ip_vs.c	2000/04/09 02:55:51	1.17
--- ip_vs.c	2000/04/09 11:05:21
***************
*** 893,899 ****
  
  /*
   *	Hashes ip_vs_service in the ip_vs_svc_table by <proto,addr,port>
!  *      or in the ip_vs_svc_table by fwmark.
   *      Should be called with locked tables.
   *	Returns bool success.
   */
--- 893,899 ----
  
  /*
   *	Hashes ip_vs_service in the ip_vs_svc_table by <proto,addr,port>
!  *      or in the ip_vs_svc_fwm_table by fwmark.
   *      Should be called with locked tables.
   *	Returns bool success.
   */
***************
*** 1198,1212 ****
          l = &ip_vs_dest_trash;
          for (e=l->next; e!=l; e=e->next) {
                  dest = list_entry(e, struct ip_vs_dest, n_list);
!                 IP_VS_DBG("Destiantion %08X:%04X still in trash, refcnt=%d\n",
                            ntohl(dest->addr), ntohs(dest->port),
                            atomic_read(&dest->refcnt));
                  if (dest->addr == daddr &&
                      dest->port == dport &&
                      ((dest->protocol == svc->protocol &&
                        dest->vaddr == svc->addr &&
!                       dest->vport == svc->port)
!                      || dest->vfwmark == svc->fwmark)) {
                          /* HIT */
                          return dest;
                  }
--- 1198,1213 ----
          l = &ip_vs_dest_trash;
          for (e=l->next; e!=l; e=e->next) {
                  dest = list_entry(e, struct ip_vs_dest, n_list);
!                 IP_VS_DBG("Destiantion %u/%08X:%04X still in trash, refcnt=%d\n",
!                           dest->vfwmark,
                            ntohl(dest->addr), ntohs(dest->port),
                            atomic_read(&dest->refcnt));
                  if (dest->addr == daddr &&
                      dest->port == dport &&
                      ((dest->protocol == svc->protocol &&
                        dest->vaddr == svc->addr &&
!                       dest->vport == svc->port) ||
!                      (svc->fwmark && dest->vfwmark == svc->fwmark))) {
                          /* HIT */
                          return dest;
                  }
***************
*** 1215,1221 ****
                   * Try to purge the destination from trash if not referenced
                   */
                  if (atomic_read(&dest->refcnt) == 1) {
!                         IP_VS_DBG("Removing destiantion %08X:%04X from trash\n",
                                    ntohl(dest->addr), ntohs(dest->port));
                          e = e->prev;
                          list_del(&dest->n_list);
--- 1216,1223 ----
                   * Try to purge the destination from trash if not referenced
                   */
                  if (atomic_read(&dest->refcnt) == 1) {
!                         IP_VS_DBG("Removing destiantion %u/%08X:%04X from trash\n", 
!                                   dest->vfwmark,
                                    ntohl(dest->addr), ntohs(dest->port));
                          e = e->prev;
                          list_del(&dest->n_list);
***************
*** 1294,1299 ****
--- 1296,1302 ----
          dest->protocol = svc->protocol;
          dest->vaddr = svc->addr;
          dest->vport = svc->port;
+         dest->vfwmark = svc->fwmark;
          dest->addr = mm->daddr;
          dest->port = mm->dport;
  
