Lines Matching defs:dest

460 __ip_vs_bind_svc(struct ip_vs_dest *dest, struct ip_vs_service *svc)
463 dest->svc = svc;
474 __ip_vs_unbind_svc(struct ip_vs_dest *dest)
476 struct ip_vs_service *svc = dest->svc;
478 dest->svc = NULL;
510 static void ip_vs_rs_hash(struct netns_ipvs *ipvs, struct ip_vs_dest *dest)
514 if (dest->in_rs_table)
521 hash = ip_vs_rs_hashkey(dest->af, &dest->addr, dest->port);
523 hlist_add_head_rcu(&dest->d_list, &ipvs->rs_table[hash]);
524 dest->in_rs_table = 1;
528 static void ip_vs_rs_unhash(struct ip_vs_dest *dest)
533 if (dest->in_rs_table) {
534 hlist_del_rcu(&dest->d_list);
535 dest->in_rs_table = 0;
545 struct ip_vs_dest *dest;
551 hlist_for_each_entry_rcu(dest, &ipvs->rs_table[hash], d_list) {
552 if (dest->port == dport &&
553 dest->af == af &&
554 ip_vs_addr_equal(af, &dest->addr, daddr) &&
555 (dest->protocol == protocol || dest->vfwmark)) {
573 struct ip_vs_dest *dest;
578 list_for_each_entry_rcu(dest, &svc->destinations, n_list) {
579 if ((dest->af == svc->af)
580 && ip_vs_addr_equal(svc->af, &dest->addr, daddr)
581 && (dest->port == dport)) {
583 return dest;
605 struct ip_vs_dest *dest;
614 dest = ip_vs_lookup_dest(svc, daddr, port);
615 if (!dest)
616 dest = ip_vs_lookup_dest(svc, daddr, port ^ dport);
617 return dest;
630 /* Release dest_dst and dst_cache for dest in user context */
631 static void __ip_vs_dst_cache_reset(struct ip_vs_dest *dest)
635 old = rcu_dereference_protected(dest->dest_dst, 1);
637 RCU_INIT_POINTER(dest->dest_dst, NULL);
643 * Lookup dest by {svc,addr,port} in the destination trash.
646 * The reason to add the destination trash is when the dest is temporary
647 * down (either by administrator or by monitor program), the dest can be
648 * picked back from the trash, the remaining connections to the dest can
649 * continue, and the counting information of the dest is also useful for
656 struct ip_vs_dest *dest;
663 list_for_each_entry(dest, &ipvs->dest_trash, t_list) {
665 "dest->refcnt=%d\n",
666 dest->vfwmark,
667 IP_VS_DBG_ADDR(svc->af, &dest->addr),
668 ntohs(dest->port),
669 atomic_read(&dest->refcnt));
670 /* We can not reuse dest while in grace period
671 * because conns still can use dest->svc
673 if (test_bit(IP_VS_DEST_STATE_REMOVING, &dest->state))
675 if (dest->af == svc->af &&
676 ip_vs_addr_equal(svc->af, &dest->addr, daddr) &&
677 dest->port == dport &&
678 dest->vfwmark == svc->fwmark &&
679 dest->protocol == svc->protocol &&
681 (ip_vs_addr_equal(svc->af, &dest->vaddr, &svc->addr) &&
682 dest->vport == svc->port))) {
684 list_del(&dest->t_list);
685 ip_vs_dest_hold(dest);
690 dest = NULL;
695 return dest;
698 static void ip_vs_dest_free(struct ip_vs_dest *dest)
700 __ip_vs_dst_cache_reset(dest);
701 __ip_vs_unbind_svc(dest);
702 free_percpu(dest->stats.cpustats);
703 kfree(dest);
717 struct ip_vs_dest *dest, *nxt;
722 list_for_each_entry_safe(dest, nxt, &ipvs->dest_trash, t_list) {
723 list_del(&dest->t_list);
724 ip_vs_dest_free(dest);
770 __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
778 atomic_set(&dest->weight, udest->weight);
790 ip_vs_rs_hash(ipvs, dest);
792 atomic_set(&dest->conn_flags, conn_flags);
795 if (!dest->svc) {
796 __ip_vs_bind_svc(dest, svc);
798 if (dest->svc != svc) {
799 __ip_vs_unbind_svc(dest);
800 ip_vs_zero_stats(&dest->stats);
801 __ip_vs_bind_svc(dest, svc);
805 /* set the dest status flags */
806 dest->flags |= IP_VS_DEST_F_AVAILABLE;
808 if (udest->u_threshold == 0 || udest->u_threshold > dest->u_threshold)
809 dest->flags &= ~IP_VS_DEST_F_OVERLOAD;
810 dest->u_threshold = udest->u_threshold;
811 dest->l_threshold = udest->l_threshold;
813 spin_lock_bh(&dest->dst_lock);
814 __ip_vs_dst_cache_reset(dest);
815 spin_unlock_bh(&dest->dst_lock);
819 ip_vs_start_estimator(svc->net, &dest->stats);
820 list_add_rcu(&dest->n_list, &svc->destinations);
823 sched->add_dest(svc, dest);
826 sched->upd_dest(svc, dest);
838 struct ip_vs_dest *dest;
858 dest = kzalloc(sizeof(struct ip_vs_dest), GFP_KERNEL);
859 if (dest == NULL)
862 dest->stats.cpustats = alloc_percpu(struct ip_vs_cpu_stats);
863 if (!dest->stats.cpustats)
866 dest->af = svc->af;
867 dest->protocol = svc->protocol;
868 dest->vaddr = svc->addr;
869 dest->vport = svc->port;
870 dest->vfwmark = svc->fwmark;
871 ip_vs_addr_copy(svc->af, &dest->addr, &udest->addr);
872 dest->port = udest->port;
874 atomic_set(&dest->activeconns, 0);
875 atomic_set(&dest->inactconns, 0);
876 atomic_set(&dest->persistconns, 0);
877 atomic_set(&dest->refcnt, 1);
879 INIT_HLIST_NODE(&dest->d_list);
880 spin_lock_init(&dest->dst_lock);
881 spin_lock_init(&dest->stats.lock);
882 __ip_vs_update_dest(svc, dest, udest, 1);
884 *dest_p = dest;
890 kfree(dest);
901 struct ip_vs_dest *dest;
923 dest = ip_vs_lookup_dest(svc, &daddr, dport);
926 if (dest != NULL) {
927 IP_VS_DBG(1, "%s(): dest already exists\n", __func__);
932 * Check if the dest already exists in the trash and
935 dest = ip_vs_trash_get_dest(svc, &daddr, dport);
937 if (dest != NULL) {
939 "dest->refcnt=%d, service %u/%s:%u\n",
941 atomic_read(&dest->refcnt),
942 dest->vfwmark,
943 IP_VS_DBG_ADDR(svc->af, &dest->vaddr),
944 ntohs(dest->vport));
946 __ip_vs_update_dest(svc, dest, udest, 1);
950 * Allocate and initialize the dest structure
952 ret = ip_vs_new_dest(svc, udest, &dest);
966 struct ip_vs_dest *dest;
987 dest = ip_vs_lookup_dest(svc, &daddr, dport);
990 if (dest == NULL) {
991 IP_VS_DBG(1, "%s(): dest doesn't exist\n", __func__);
995 __ip_vs_update_dest(svc, dest, udest, 0);
1003 struct ip_vs_dest *dest = container_of(head, struct ip_vs_dest,
1007 clear_bit(IP_VS_DEST_STATE_REMOVING, &dest->state);
1014 static void __ip_vs_del_dest(struct net *net, struct ip_vs_dest *dest,
1019 ip_vs_stop_estimator(net, &dest->stats);
1024 ip_vs_rs_unhash(dest);
1027 set_bit(IP_VS_DEST_STATE_REMOVING, &dest->state);
1028 call_rcu(&dest->rcu_head, ip_vs_dest_wait_readers);
1032 IP_VS_DBG_BUF(3, "Moving dest %s:%u into trash, dest->refcnt=%d\n",
1033 IP_VS_DBG_ADDR(dest->af, &dest->addr), ntohs(dest->port),
1034 atomic_read(&dest->refcnt));
1038 /* dest lives in trash without reference */
1039 list_add(&dest->t_list, &ipvs->dest_trash);
1041 ip_vs_dest_put(dest);
1049 struct ip_vs_dest *dest,
1052 dest->flags &= ~IP_VS_DEST_F_AVAILABLE;
1057 list_del_rcu(&dest->n_list);
1065 sched->del_dest(svc, dest);
1076 struct ip_vs_dest *dest;
1083 dest = ip_vs_lookup_dest(svc, &udest->addr, dport);
1086 if (dest == NULL) {
1092 * Unlink dest from the service
1094 __ip_vs_unlink_dest(svc, dest, 1);
1099 __ip_vs_del_dest(svc->net, dest, false);
1110 struct ip_vs_dest *dest, *next;
1113 list_for_each_entry_safe(dest, next, &ipvs->dest_trash, t_list) {
1114 /* Skip if dest is in grace period */
1115 if (test_bit(IP_VS_DEST_STATE_REMOVING, &dest->state))
1117 if (atomic_read(&dest->refcnt) > 0)
1120 dest->vfwmark,
1121 IP_VS_DBG_ADDR(dest->svc->af, &dest->addr),
1122 ntohs(dest->port));
1123 list_del(&dest->t_list);
1124 ip_vs_dest_free(dest);
1338 struct ip_vs_dest *dest, *nxt;
1363 list_for_each_entry_safe(dest, nxt, &svc->destinations, n_list) {
1364 __ip_vs_unlink_dest(svc, dest, 0);
1365 __ip_vs_del_dest(svc->net, dest, cleanup);
1469 ip_vs_forget_dev(struct ip_vs_dest *dest, struct net_device *dev)
1473 spin_lock_bh(&dest->dst_lock);
1474 dest_dst = rcu_dereference_protected(dest->dest_dst, 1);
1476 IP_VS_DBG_BUF(3, "Reset dev:%s dest %s:%u ,dest->refcnt=%d\n",
1478 IP_VS_DBG_ADDR(dest->af, &dest->addr),
1479 ntohs(dest->port),
1480 atomic_read(&dest->refcnt));
1481 __ip_vs_dst_cache_reset(dest);
1483 spin_unlock_bh(&dest->dst_lock);
1496 struct ip_vs_dest *dest;
1507 list_for_each_entry(dest, &svc->destinations,
1509 ip_vs_forget_dev(dest, dev);
1516 list_for_each_entry(dest, &svc->destinations,
1518 ip_vs_forget_dev(dest, dev);
1526 list_for_each_entry(dest, &ipvs->dest_trash, t_list) {
1527 ip_vs_forget_dev(dest, dev);
1540 struct ip_vs_dest *dest;
1542 list_for_each_entry(dest, &svc->destinations, n_list) {
1543 ip_vs_zero_stats(&dest->stats);
2023 const struct ip_vs_dest *dest;
2055 list_for_each_entry_rcu(dest, &svc->destinations, n_list) {
2057 if (dest->af == AF_INET6)
2061 &dest->addr.in6,
2062 ntohs(dest->port),
2063 ip_vs_fwd_name(atomic_read(&dest->conn_flags)),
2064 atomic_read(&dest->weight),
2065 atomic_read(&dest->activeconns),
2066 atomic_read(&dest->inactconns));
2072 ntohl(dest->addr.ip),
2073 ntohs(dest->port),
2074 ip_vs_fwd_name(atomic_read(&dest->conn_flags)),
2075 atomic_read(&dest->weight),
2076 atomic_read(&dest->activeconns),
2077 atomic_read(&dest->inactconns));
2542 struct ip_vs_dest *dest;
2546 list_for_each_entry(dest, &svc->destinations, n_list) {
2550 entry.addr = dest->addr.ip;
2551 entry.port = dest->port;
2552 entry.conn_flags = atomic_read(&dest->conn_flags);
2553 entry.weight = atomic_read(&dest->weight);
2554 entry.u_threshold = dest->u_threshold;
2555 entry.l_threshold = dest->l_threshold;
2556 entry.activeconns = atomic_read(&dest->activeconns);
2557 entry.inactconns = atomic_read(&dest->inactconns);
2558 entry.persistconns = atomic_read(&dest->persistconns);
2559 ip_vs_copy_stats(&entry.stats, &dest->stats);
3084 static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest)
3092 if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) ||
3093 nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) ||
3095 (atomic_read(&dest->conn_flags) &
3098 atomic_read(&dest->weight)) ||
3099 nla_put_u32(skb, IPVS_DEST_ATTR_U_THRESH, dest->u_threshold) ||
3100 nla_put_u32(skb, IPVS_DEST_ATTR_L_THRESH, dest->l_threshold) ||
3102 atomic_read(&dest->activeconns)) ||
3104 atomic_read(&dest->inactconns)) ||
3106 atomic_read(&dest->persistconns)))
3108 if (ip_vs_genl_fill_stats(skb, IPVS_DEST_ATTR_STATS, &dest->stats))
3120 static int ip_vs_genl_dump_dest(struct sk_buff *skb, struct ip_vs_dest *dest,
3131 if (ip_vs_genl_fill_dest(skb, dest) < 0)
3147 struct ip_vs_dest *dest;
3164 list_for_each_entry(dest, &svc->destinations, n_list) {
3167 if (ip_vs_genl_dump_dest(skb, dest, cb) < 0) {
3818 /* Some dest can be in grace period even before cleanup, we have to