1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun (c) 2008 NetApp. All Rights Reserved.
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun NetApp provides this source code under the GPL v2 License.
6*4882a593Smuzhiyun The GPL v2 license is available at
7*4882a593Smuzhiyun https://opensource.org/licenses/gpl-license.php.
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10*4882a593Smuzhiyun "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11*4882a593Smuzhiyun LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
12*4882a593Smuzhiyun A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
13*4882a593Smuzhiyun CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
14*4882a593Smuzhiyun EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
15*4882a593Smuzhiyun PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
16*4882a593Smuzhiyun PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
17*4882a593Smuzhiyun LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
18*4882a593Smuzhiyun NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19*4882a593Smuzhiyun SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun ******************************************************************************/
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun /*
24*4882a593Smuzhiyun * Functions and macros used internally by RPC
25*4882a593Smuzhiyun */
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun #ifndef _NET_SUNRPC_SUNRPC_H
28*4882a593Smuzhiyun #define _NET_SUNRPC_SUNRPC_H
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun #include <linux/net.h>
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun /*
33*4882a593Smuzhiyun * Header for dynamically allocated rpc buffers.
34*4882a593Smuzhiyun */
35*4882a593Smuzhiyun struct rpc_buffer {
36*4882a593Smuzhiyun size_t len;
37*4882a593Smuzhiyun char data[];
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun
sock_is_loopback(struct sock * sk)40*4882a593Smuzhiyun static inline int sock_is_loopback(struct sock *sk)
41*4882a593Smuzhiyun {
42*4882a593Smuzhiyun struct dst_entry *dst;
43*4882a593Smuzhiyun int loopback = 0;
44*4882a593Smuzhiyun rcu_read_lock();
45*4882a593Smuzhiyun dst = rcu_dereference(sk->sk_dst_cache);
46*4882a593Smuzhiyun if (dst && dst->dev &&
47*4882a593Smuzhiyun (dst->dev->features & NETIF_F_LOOPBACK))
48*4882a593Smuzhiyun loopback = 1;
49*4882a593Smuzhiyun rcu_read_unlock();
50*4882a593Smuzhiyun return loopback;
51*4882a593Smuzhiyun }
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun int rpc_clients_notifier_register(void);
54*4882a593Smuzhiyun void rpc_clients_notifier_unregister(void);
55*4882a593Smuzhiyun void auth_domain_cleanup(void);
56*4882a593Smuzhiyun #endif /* _NET_SUNRPC_SUNRPC_H */
57