xref: /openbmc/linux/net/ipv6/ila/ila.h (revision 33f11d16142b06588eedfc1dd8cf93790979a712)
1*33f11d16STom Herbert /*
2*33f11d16STom Herbert  * Copyright (c) 2015 Tom Herbert <tom@herbertland.com>
3*33f11d16STom Herbert  *
4*33f11d16STom Herbert  * This program is free software; you can redistribute it and/or
5*33f11d16STom Herbert  * modify it under the terms of the GNU General Public License as
6*33f11d16STom Herbert  * published by the Free Software Foundation; either version 2 of
7*33f11d16STom Herbert  * the License, or (at your option) any later version.
8*33f11d16STom Herbert  *
9*33f11d16STom Herbert  */
10*33f11d16STom Herbert 
11*33f11d16STom Herbert #ifndef __ILA_H
12*33f11d16STom Herbert #define __ILA_H
13*33f11d16STom Herbert 
14*33f11d16STom Herbert #include <linux/errno.h>
15*33f11d16STom Herbert #include <linux/ip.h>
16*33f11d16STom Herbert #include <linux/kernel.h>
17*33f11d16STom Herbert #include <linux/module.h>
18*33f11d16STom Herbert #include <linux/socket.h>
19*33f11d16STom Herbert #include <linux/skbuff.h>
20*33f11d16STom Herbert #include <linux/types.h>
21*33f11d16STom Herbert #include <net/checksum.h>
22*33f11d16STom Herbert #include <net/ip.h>
23*33f11d16STom Herbert #include <net/protocol.h>
24*33f11d16STom Herbert #include <uapi/linux/ila.h>
25*33f11d16STom Herbert 
26*33f11d16STom Herbert struct ila_params {
27*33f11d16STom Herbert 	__be64 locator;
28*33f11d16STom Herbert 	__be64 locator_match;
29*33f11d16STom Herbert 	__wsum csum_diff;
30*33f11d16STom Herbert };
31*33f11d16STom Herbert 
32*33f11d16STom Herbert static inline __wsum compute_csum_diff8(const __be32 *from, const __be32 *to)
33*33f11d16STom Herbert {
34*33f11d16STom Herbert 	__be32 diff[] = {
35*33f11d16STom Herbert 		~from[0], ~from[1], to[0], to[1],
36*33f11d16STom Herbert 	};
37*33f11d16STom Herbert 
38*33f11d16STom Herbert 	return csum_partial(diff, sizeof(diff), 0);
39*33f11d16STom Herbert }
40*33f11d16STom Herbert 
41*33f11d16STom Herbert void update_ipv6_locator(struct sk_buff *skb, struct ila_params *p);
42*33f11d16STom Herbert 
43*33f11d16STom Herbert int ila_lwt_init(void);
44*33f11d16STom Herbert void ila_lwt_fini(void);
45*33f11d16STom Herbert 
46*33f11d16STom Herbert #endif /* __ILA_H */
47