mirror of https://gitee.com/openkylin/linux.git
netfilter: nf_osf: add nf_osf_find()
This new function returns the OS genre as a string. Plan is to use to from the new nft_osf extension. Note that this doesn't yet support ttl options, but it could be easily extended to do so. Tested-by: Fernando Fernandez Mancera <ffmancera@riseup.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
222440b4e8
commit
51c23b47e6
|
@ -1,3 +1,7 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _NFOSF_H
|
||||
#define _NFOSF_H
|
||||
|
||||
#include <uapi/linux/netfilter/nf_osf.h>
|
||||
|
||||
/* Initial window size option state machine: multiple of mss, mtu or
|
||||
|
@ -31,3 +35,8 @@ 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);
|
||||
|
||||
const char *nf_osf_find(const struct sk_buff *skb,
|
||||
const struct list_head *nf_osf_fingers);
|
||||
|
||||
#endif /* _NFOSF_H */
|
||||
|
|
|
@ -249,4 +249,34 @@ nf_osf_match(const struct sk_buff *skb, u_int8_t family,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(nf_osf_match);
|
||||
|
||||
const char *nf_osf_find(const struct sk_buff *skb,
|
||||
const struct list_head *nf_osf_fingers)
|
||||
{
|
||||
const struct iphdr *ip = ip_hdr(skb);
|
||||
const struct nf_osf_user_finger *f;
|
||||
unsigned char opts[MAX_IPOPTLEN];
|
||||
const struct nf_osf_finger *kf;
|
||||
struct nf_osf_hdr_ctx ctx;
|
||||
const struct tcphdr *tcp;
|
||||
const char *genre = NULL;
|
||||
|
||||
memset(&ctx, 0, sizeof(ctx));
|
||||
|
||||
tcp = nf_osf_hdr_ctx_init(&ctx, skb, ip, opts);
|
||||
if (!tcp)
|
||||
return false;
|
||||
|
||||
list_for_each_entry_rcu(kf, &nf_osf_fingers[ctx.df], finger_entry) {
|
||||
f = &kf->finger;
|
||||
if (!nf_osf_match_one(skb, f, -1, &ctx))
|
||||
continue;
|
||||
|
||||
genre = f->genre;
|
||||
break;
|
||||
}
|
||||
|
||||
return genre;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_osf_find);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
Loading…
Reference in New Issue