static inline void adjust_tcp_sequence(u32 seq, int sizediff, struct nf_conn *ct, enum ip_conntrack_info ctinfo) { enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo); struct nf_conn_nat *nat = nfct_nat(ct); struct nf_nat_seq *this_way = &nat->seq[dir]; #ifdef CONFIG_HTC_NETWORK_MODIFY if (IS_ERR(this_way) || (!this_way)) printk(KERN_ERR "[NET] this_way is NULL in %s!\n", __func__); #endif pr_debug("adjust_tcp_sequence: seq = %u, sizediff = %d\n", seq, sizediff); pr_debug("adjust_tcp_sequence: Seq_offset before: "); DUMP_OFFSET(this_way); spin_lock_bh(&nf_nat_seqofs_lock); if (this_way->offset_before == this_way->offset_after || before(this_way->correction_pos, seq)) { this_way->correction_pos = seq; this_way->offset_before = this_way->offset_after; this_way->offset_after += sizediff; } spin_unlock_bh(&nf_nat_seqofs_lock); pr_debug("adjust_tcp_sequence: Seq_offset after: "); DUMP_OFFSET(this_way); }
static inline void adjust_tcp_sequence(u32 seq, int sizediff, struct nf_conn *ct, enum ip_conntrack_info ctinfo) { enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo); struct nf_conn_nat *nat = nfct_nat(ct); struct nf_nat_seq *this_way = &nat->seq[dir]; pr_debug("adjust_tcp_sequence: seq = %u, sizediff = %d\n", seq, sizediff); pr_debug("adjust_tcp_sequence: Seq_offset before: "); DUMP_OFFSET(this_way); spin_lock_bh(&nf_nat_seqofs_lock); /* */ if (this_way->offset_before == this_way->offset_after || before(this_way->correction_pos, seq)) { this_way->correction_pos = seq; this_way->offset_before = this_way->offset_after; this_way->offset_after += sizediff; } spin_unlock_bh(&nf_nat_seqofs_lock); pr_debug("adjust_tcp_sequence: Seq_offset after: "); DUMP_OFFSET(this_way); }
/* Setup TCP sequence correction given this change at this sequence */ static inline void adjust_tcp_sequence(u32 seq, int sizediff, struct nf_conn *ct, enum ip_conntrack_info ctinfo) { enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo); struct nf_conn_nat *nat = nfct_nat(ct); struct nf_nat_seq *this_way = &nat->seq[dir]; pr_debug("adjust_tcp_sequence: seq = %u, sizediff = %d\n", seq, sizediff); pr_debug("adjust_tcp_sequence: Seq_offset before: "); DUMP_OFFSET(this_way); spin_lock_bh(&nf_nat_seqofs_lock); /* SYN adjust. If it's uninitialized, or this is after last * correction, record it: we don't handle more than one * adjustment in the window, but do deal with common case of a * retransmit */ if (this_way->offset_before == this_way->offset_after || before(this_way->correction_pos, seq)) { this_way->correction_pos = seq; this_way->offset_before = this_way->offset_after; this_way->offset_after += sizediff; } spin_unlock_bh(&nf_nat_seqofs_lock); pr_debug("adjust_tcp_sequence: Seq_offset after: "); DUMP_OFFSET(this_way); }
/* Setup TCP sequence correction given this change at this sequence */ inline void adjust_tcp_sequence(u32 seq, int sizediff, struct nf_conn *ct, enum ip_conntrack_info ctinfo) { int dir; struct nf_nat_seq *this_way, *other_way; struct nf_conn_nat *nat = &ct->nat; u8 protocol; DEBUGP("nf_nat_resize_packet: old_size = %u, new_size = %u\n", (*skb)->len, new_size); dir = CTINFO2DIR(ctinfo); this_way = &nat->info.seq[dir]; other_way = &nat->info.seq[!dir]; DEBUGP("nf_nat_resize_packet: Seq_offset before: "); DUMP_OFFSET(this_way); spin_lock_bh(&nf_nat_seqofs_lock); /* SYN adjust. If it's uninitialized, or this is after last * correction, record it: we don't handle more than one * adjustment in the window, but do deal with common case of a * retransmit */ if (this_way->offset_before == this_way->offset_after || before(this_way->correction_pos, seq)) { this_way->correction_pos = seq; this_way->offset_before = this_way->offset_after; this_way->offset_after += sizediff; } spin_unlock_bh(&nf_nat_seqofs_lock); if(unlikely(g_hotb_policy_switch == HOTB_SWITCH_ON)) { protocol = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum; if(IPPROTO_UDP == protocol || IPPROTO_TCP == protocol) { hotb_notify_ct_new(ct); } } DEBUGP("nf_nat_resize_packet: Seq_offset after: "); DUMP_OFFSET(this_way); }
/* Setup TCP sequence correction given this change at this sequence */ static inline void adjust_tcp_sequence(u32 seq, int sizediff, struct nf_conn *ct, enum ip_conntrack_info ctinfo) { int dir; struct nf_nat_seq *this_way, *other_way; struct nf_conn_nat *nat = nfct_nat(ct); DEBUGP("nf_nat_resize_packet: old_size = %u, new_size = %u\n", (*skb)->len, new_size); dir = CTINFO2DIR(ctinfo); this_way = &nat->info.seq[dir]; other_way = &nat->info.seq[!dir]; DEBUGP("nf_nat_resize_packet: Seq_offset before: "); DUMP_OFFSET(this_way); spin_lock_bh(&nf_nat_seqofs_lock); /* SYN adjust. If it's uninitialized, or this is after last * correction, record it: we don't handle more than one * adjustment in the window, but do deal with common case of a * retransmit */ if (this_way->offset_before == this_way->offset_after || before(this_way->correction_pos, seq)) { this_way->correction_pos = seq; this_way->offset_before = this_way->offset_after; this_way->offset_after += sizediff; } spin_unlock_bh(&nf_nat_seqofs_lock); DEBUGP("nf_nat_resize_packet: Seq_offset after: "); DUMP_OFFSET(this_way); }