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