Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
bf355b8d DL |
2 | /* |
3 | * SR-IPv6 implementation | |
4 | * | |
5 | * Author: | |
6 | * David Lebrun <david.lebrun@uclouvain.be> | |
bf355b8d DL |
7 | */ |
8 | ||
9 | #ifndef _NET_SEG6_HMAC_H | |
10 | #define _NET_SEG6_HMAC_H | |
11 | ||
12 | #include <net/flow.h> | |
13 | #include <net/ip6_fib.h> | |
14 | #include <net/sock.h> | |
15 | #include <linux/ip.h> | |
16 | #include <linux/ipv6.h> | |
17 | #include <linux/route.h> | |
18 | #include <net/seg6.h> | |
19 | #include <linux/seg6_hmac.h> | |
0eb71a9d | 20 | #include <linux/rhashtable-types.h> |
bf355b8d DL |
21 | |
22 | #define SEG6_HMAC_MAX_DIGESTSIZE 160 | |
23 | #define SEG6_HMAC_RING_SIZE 256 | |
24 | ||
25 | struct seg6_hmac_info { | |
26 | struct rhash_head node; | |
27 | struct rcu_head rcu; | |
28 | ||
29 | u32 hmackeyid; | |
30 | char secret[SEG6_HMAC_SECRET_LEN]; | |
31 | u8 slen; | |
32 | u8 alg_id; | |
33 | }; | |
34 | ||
35 | struct seg6_hmac_algo { | |
36 | u8 alg_id; | |
37 | char name[64]; | |
38 | struct crypto_shash * __percpu *tfms; | |
39 | struct shash_desc * __percpu *shashs; | |
40 | }; | |
41 | ||
42 | extern int seg6_hmac_compute(struct seg6_hmac_info *hinfo, | |
43 | struct ipv6_sr_hdr *hdr, struct in6_addr *saddr, | |
44 | u8 *output); | |
45 | extern struct seg6_hmac_info *seg6_hmac_info_lookup(struct net *net, u32 key); | |
46 | extern int seg6_hmac_info_add(struct net *net, u32 key, | |
47 | struct seg6_hmac_info *hinfo); | |
48 | extern int seg6_hmac_info_del(struct net *net, u32 key); | |
49 | extern int seg6_push_hmac(struct net *net, struct in6_addr *saddr, | |
50 | struct ipv6_sr_hdr *srh); | |
51 | extern bool seg6_hmac_validate_skb(struct sk_buff *skb); | |
52 | extern int seg6_hmac_init(void); | |
53 | extern void seg6_hmac_exit(void); | |
54 | extern int seg6_hmac_net_init(struct net *net); | |
55 | extern void seg6_hmac_net_exit(struct net *net); | |
56 | ||
57 | #endif |