Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|---|
2 | /* |
3 | * SR-IPv6 implementation |
4 | * |
5 | * Author: |
6 | * David Lebrun <david.lebrun@uclouvain.be> |
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> |
20 | #include <linux/rhashtable-types.h> |
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 |
58 |
Warning: This file is not a C or C++ file. It does not have highlighting.