1ddba40beSFernando Fernandez Mancera /* SPDX-License-Identifier: GPL-2.0 */
2ddba40beSFernando Fernandez Mancera #ifndef _NFOSF_H
3ddba40beSFernando Fernandez Mancera #define _NFOSF_H
4ddba40beSFernando Fernandez Mancera 
5ddba40beSFernando Fernandez Mancera #include <uapi/linux/netfilter/nfnetlink_osf.h>
6ddba40beSFernando Fernandez Mancera 
7ddba40beSFernando Fernandez Mancera enum osf_fmatch_states {
8ddba40beSFernando Fernandez Mancera 	/* Packet does not match the fingerprint */
9ddba40beSFernando Fernandez Mancera 	FMATCH_WRONG = 0,
10ddba40beSFernando Fernandez Mancera 	/* Packet matches the fingerprint */
11ddba40beSFernando Fernandez Mancera 	FMATCH_OK,
12ddba40beSFernando Fernandez Mancera 	/* Options do not match the fingerprint, but header does */
13ddba40beSFernando Fernandez Mancera 	FMATCH_OPT_WRONG,
14ddba40beSFernando Fernandez Mancera };
15ddba40beSFernando Fernandez Mancera 
16ddba40beSFernando Fernandez Mancera extern struct list_head nf_osf_fingers[2];
17ddba40beSFernando Fernandez Mancera 
18ddba40beSFernando Fernandez Mancera struct nf_osf_finger {
19ddba40beSFernando Fernandez Mancera 	struct rcu_head			rcu_head;
20ddba40beSFernando Fernandez Mancera 	struct list_head		finger_entry;
21ddba40beSFernando Fernandez Mancera 	struct nf_osf_user_finger	finger;
22ddba40beSFernando Fernandez Mancera };
23ddba40beSFernando Fernandez Mancera 
2422c7652cSFernando Fernandez Mancera struct nf_osf_data {
2522c7652cSFernando Fernandez Mancera 	const char *genre;
2622c7652cSFernando Fernandez Mancera 	const char *version;
2722c7652cSFernando Fernandez Mancera };
2822c7652cSFernando Fernandez Mancera 
29ddba40beSFernando Fernandez Mancera bool nf_osf_match(const struct sk_buff *skb, u_int8_t family,
30ddba40beSFernando Fernandez Mancera 		  int hooknum, struct net_device *in, struct net_device *out,
31ddba40beSFernando Fernandez Mancera 		  const struct nf_osf_info *info, struct net *net,
32ddba40beSFernando Fernandez Mancera 		  const struct list_head *nf_osf_fingers);
33ddba40beSFernando Fernandez Mancera 
3422c7652cSFernando Fernandez Mancera bool nf_osf_find(const struct sk_buff *skb,
35a218dc82SFernando Fernandez Mancera 		 const struct list_head *nf_osf_fingers,
3622c7652cSFernando Fernandez Mancera 		 const int ttl_check, struct nf_osf_data *data);
37ddba40beSFernando Fernandez Mancera 
38ddba40beSFernando Fernandez Mancera #endif /* _NFOSF_H */
39