hc
2024-03-22 ac5f19e89dcbd5c7428fcc78a0d407c887564466
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _NF_CONNTRACK_SEQADJ_H
#define _NF_CONNTRACK_SEQADJ_H
 
#include <net/netfilter/nf_conntrack_extend.h>
 
/**
 * struct nf_ct_seqadj - sequence number adjustment information
 *
 * @correction_pos: position of the last TCP sequence number modification
 * @offset_before: sequence number offset before last modification
 * @offset_after: sequence number offset after last modification
 */
struct nf_ct_seqadj {
   u32        correction_pos;
   s32        offset_before;
   s32        offset_after;
};
 
struct nf_conn_seqadj {
   struct nf_ct_seqadj    seq[IP_CT_DIR_MAX];
};
 
static inline struct nf_conn_seqadj *nfct_seqadj(const struct nf_conn *ct)
{
   return nf_ct_ext_find(ct, NF_CT_EXT_SEQADJ);
}
 
static inline struct nf_conn_seqadj *nfct_seqadj_ext_add(struct nf_conn *ct)
{
   return nf_ct_ext_add(ct, NF_CT_EXT_SEQADJ, GFP_ATOMIC);
}
 
int nf_ct_seqadj_init(struct nf_conn *ct, enum ip_conntrack_info ctinfo,
             s32 off);
int nf_ct_seqadj_set(struct nf_conn *ct, enum ip_conntrack_info ctinfo,
            __be32 seq, s32 off);
void nf_ct_tcp_seqadj_set(struct sk_buff *skb, struct nf_conn *ct,
             enum ip_conntrack_info ctinfo, s32 off);
 
int nf_ct_seq_adjust(struct sk_buff *skb, struct nf_conn *ct,
            enum ip_conntrack_info ctinfo, unsigned int protoff);
s32 nf_ct_seq_offset(const struct nf_conn *ct, enum ip_conntrack_dir, u32 seq);
 
int nf_conntrack_seqadj_init(void);
void nf_conntrack_seqadj_fini(void);
 
#endif /* _NF_CONNTRACK_SEQADJ_H */