xref: /freebsd/sys/netinet6/in6_rss.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1b2bdc62aSAdrian Chadd /*-
2b2bdc62aSAdrian Chadd  * Copyright (c) 2010-2011 Juniper Networks, Inc.
3b2bdc62aSAdrian Chadd  * All rights reserved.
4b2bdc62aSAdrian Chadd  *
5b2bdc62aSAdrian Chadd  * This software was developed by Robert N. M. Watson under contract
6b2bdc62aSAdrian Chadd  * to Juniper Networks, Inc.
7b2bdc62aSAdrian Chadd  *
8b2bdc62aSAdrian Chadd  * Redistribution and use in source and binary forms, with or without
9b2bdc62aSAdrian Chadd  * modification, are permitted provided that the following conditions
10b2bdc62aSAdrian Chadd  * are met:
11b2bdc62aSAdrian Chadd  * 1. Redistributions of source code must retain the above copyright
12b2bdc62aSAdrian Chadd  *    notice, this list of conditions and the following disclaimer.
13b2bdc62aSAdrian Chadd  * 2. Redistributions in binary form must reproduce the above copyright
14b2bdc62aSAdrian Chadd  *    notice, this list of conditions and the following disclaimer in the
15b2bdc62aSAdrian Chadd  *    documentation and/or other materials provided with the distribution.
16b2bdc62aSAdrian Chadd  *
17b2bdc62aSAdrian Chadd  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18b2bdc62aSAdrian Chadd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19b2bdc62aSAdrian Chadd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20b2bdc62aSAdrian Chadd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21b2bdc62aSAdrian Chadd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22b2bdc62aSAdrian Chadd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23b2bdc62aSAdrian Chadd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24b2bdc62aSAdrian Chadd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25b2bdc62aSAdrian Chadd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26b2bdc62aSAdrian Chadd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27b2bdc62aSAdrian Chadd  * SUCH DAMAGE.
28b2bdc62aSAdrian Chadd  */
29b2bdc62aSAdrian Chadd 
30b2bdc62aSAdrian Chadd #ifndef _NETINET6_IN6_RSS_H_
31b2bdc62aSAdrian Chadd #define	_NETINET6_IN6_RSS_H_
32b2bdc62aSAdrian Chadd 
33b2bdc62aSAdrian Chadd #include <netinet/in.h>		/* in_addr_t */
34b2bdc62aSAdrian Chadd 
35b2bdc62aSAdrian Chadd /*
36b2bdc62aSAdrian Chadd  * Network stack interface to generate a hash for a protocol tuple.
37b2bdc62aSAdrian Chadd  */
38b2bdc62aSAdrian Chadd uint32_t	rss_hash_ip6_4tuple(const struct in6_addr *src, u_short srcport,
39b2bdc62aSAdrian Chadd 		    const struct in6_addr *dst, u_short dstport);
40b2bdc62aSAdrian Chadd uint32_t	rss_hash_ip6_2tuple(const struct in6_addr *src,
41b2bdc62aSAdrian Chadd 		    const struct in6_addr *dst);
42b2bdc62aSAdrian Chadd 
4320dbdf88SAdrian Chadd /*
4420dbdf88SAdrian Chadd  * Functions to calculate a software RSS hash for a given mbuf or
4520dbdf88SAdrian Chadd  * packet detail.
4620dbdf88SAdrian Chadd  */
470be18915SAdrian Chadd int		rss_mbuf_software_hash_v6(const struct mbuf *m, int dir,
480be18915SAdrian Chadd 		    uint32_t *hashval, uint32_t *hashtype);
4920dbdf88SAdrian Chadd int		rss_proto_software_hash_v6(const struct in6_addr *src,
5020dbdf88SAdrian Chadd 		    const struct in6_addr *dst, u_short src_port,
5120dbdf88SAdrian Chadd 		    u_short dst_port, int proto, uint32_t *hashval,
5220dbdf88SAdrian Chadd 		    uint32_t *hashtype);
530be18915SAdrian Chadd struct mbuf *	rss_soft_m2cpuid_v6(struct mbuf *m, uintptr_t source,
540be18915SAdrian Chadd 		    u_int *cpuid);
55*0c325f53SAlexander V. Chernikov uint32_t	xps_proto_software_hash_v6(const struct in6_addr *s,
56*0c325f53SAlexander V. Chernikov 		    const struct in6_addr *d, u_short sp, u_short dp,
57*0c325f53SAlexander V. Chernikov 		    int proto, uint32_t *hashtype);
580be18915SAdrian Chadd 
59b2bdc62aSAdrian Chadd #endif /* !_NETINET6_IN6_RSS_H_ */
60