/* Lookup real service by <proto,addr,port> in the real service table.  */
struct ip_vs_dest* ip_vs_lookup_real_service(int af, __u16 protocol, const union nf_inet_addr *daddr, __be16 dport)
/* Lookup real service by <proto,addr,port> in the real service table.  */
struct ip_vs_dest* ip_vs_lookup_real_service(int af, __u16 protocol, const union nf_inet_addr *daddr, __be16 dport)
{
	unsigned hash;
	struct ip_vs_dest *dest;
	hash = ip_vs_rs_hashkey(af, daddr, dport);
	read_lock(&__ip_vs_rs_lock);
	list_for_each_entry(dest, &ip_vs_rtable[hash], d_list) {
		if ((dest->af == af)
		    && ip_vs_addr_equal(af, &dest->addr, daddr)
		    && (dest->port == dport)
		    && ((dest->protocol == protocol) ||
			dest->vfwmark)) {
			read_unlock(&__ip_vs_rs_lock);
			return dest;
		}
	}
	read_unlock(&__ip_vs_rs_lock);
	return NULL;
}