root/include/linux/netfilter/nfnetlink_osf.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _NFOSF_H
#define _NFOSF_H

#include <uapi/linux/netfilter/nfnetlink_osf.h>

enum osf_fmatch_states {
        /* Packet does not match the fingerprint */
        FMATCH_WRONG = 0,
        /* Packet matches the fingerprint */
        FMATCH_OK,
        /* Options do not match the fingerprint, but header does */
        FMATCH_OPT_WRONG,
};

extern struct list_head nf_osf_fingers[2];

struct nf_osf_finger {
        struct rcu_head                 rcu_head;
        struct list_head                finger_entry;
        struct nf_osf_user_finger       finger;
};

struct nf_osf_data {
        const char *genre;
        const char *version;
};

bool nf_osf_match(const struct sk_buff *skb, u_int8_t family,
                  int hooknum, struct net_device *in, struct net_device *out,
                  const struct nf_osf_info *info, struct net *net,
                  const struct list_head *nf_osf_fingers);

bool nf_osf_find(const struct sk_buff *skb,
                 const struct list_head *nf_osf_fingers,
                 const int ttl_check, struct nf_osf_data *data);

#endif /* _NFOSF_H */