Commit | Line | Data |
---|---|---|
bf355b8d DL |
1 | /* |
2 | * SR-IPv6 implementation | |
3 | * | |
4 | * Author: | |
5 | * David Lebrun <david.lebrun@uclouvain.be> | |
6 | * | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public License | |
10 | * as published by the Free Software Foundation; either version | |
11 | * 2 of the License, or (at your option) any later version. | |
12 | */ | |
13 | ||
14 | #ifndef _NET_SEG6_HMAC_H | |
15 | #define _NET_SEG6_HMAC_H | |
16 | ||
17 | #include <net/flow.h> | |
18 | #include <net/ip6_fib.h> | |
19 | #include <net/sock.h> | |
20 | #include <linux/ip.h> | |
21 | #include <linux/ipv6.h> | |
22 | #include <linux/route.h> | |
23 | #include <net/seg6.h> | |
24 | #include <linux/seg6_hmac.h> | |
25 | #include <linux/rhashtable.h> | |
26 | ||
27 | #define SEG6_HMAC_MAX_DIGESTSIZE 160 | |
28 | #define SEG6_HMAC_RING_SIZE 256 | |
29 | ||
30 | struct seg6_hmac_info { | |
31 | struct rhash_head node; | |
32 | struct rcu_head rcu; | |
33 | ||
34 | u32 hmackeyid; | |
35 | char secret[SEG6_HMAC_SECRET_LEN]; | |
36 | u8 slen; | |
37 | u8 alg_id; | |
38 | }; | |
39 | ||
40 | struct seg6_hmac_algo { | |
41 | u8 alg_id; | |
42 | char name[64]; | |
43 | struct crypto_shash * __percpu *tfms; | |
44 | struct shash_desc * __percpu *shashs; | |
45 | }; | |
46 | ||
47 | extern int seg6_hmac_compute(struct seg6_hmac_info *hinfo, | |
48 | struct ipv6_sr_hdr *hdr, struct in6_addr *saddr, | |
49 | u8 *output); | |
50 | extern struct seg6_hmac_info *seg6_hmac_info_lookup(struct net *net, u32 key); | |
51 | extern int seg6_hmac_info_add(struct net *net, u32 key, | |
52 | struct seg6_hmac_info *hinfo); | |
53 | extern int seg6_hmac_info_del(struct net *net, u32 key); | |
54 | extern int seg6_push_hmac(struct net *net, struct in6_addr *saddr, | |
55 | struct ipv6_sr_hdr *srh); | |
56 | extern bool seg6_hmac_validate_skb(struct sk_buff *skb); | |
57 | extern int seg6_hmac_init(void); | |
58 | extern void seg6_hmac_exit(void); | |
59 | extern int seg6_hmac_net_init(struct net *net); | |
60 | extern void seg6_hmac_net_exit(struct net *net); | |
61 | ||
62 | #endif |