Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbbfef3c authored by Ravinder Konka's avatar Ravinder Konka Committed by Utkarsh Saxena
Browse files

msm: net: Add support to packet threshold events.



Add support to send conntrack event when
configured packet threshold is met.

Change-Id: I11fe78a74512d901d260deead3354461fc4990ab
Acked-by: default avatarChaitanya Pratapa <cpratapa@qti.qualcomm.com>
Signed-off-by: default avatarUtkarsh Saxena <usaxena@codeaurora.org>
parent 2dc2816f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -317,6 +317,8 @@ int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
extern unsigned int nf_conntrack_htable_size;
extern unsigned int nf_conntrack_max;
extern unsigned int nf_conntrack_hash_rnd;
extern unsigned int nf_conntrack_pkt_threshold;

void init_nf_conntrack_hash_rnd(void);

void nf_conntrack_tmpl_insert(struct net *net, struct nf_conn *tmpl);
+3 −0
Original line number Diff line number Diff line
@@ -107,8 +107,11 @@ enum ip_conntrack_events {
	IPCT_NATSEQADJ = IPCT_SEQADJ,
	IPCT_SECMARK,		/* new security mark has been set */
	IPCT_LABEL,		/* new connlabel has been set */
	IPCT_COUNTER,		/* Packet counters have matched. */
};

#define IPCT_COUNTER IPCT_COUNTER

enum ip_conntrack_expect_events {
	IPEXP_NEW,		/* new expectation */
	IPEXP_DESTROY,		/* destroyed expectation */
+17 −2
Original line number Diff line number Diff line
@@ -120,6 +120,9 @@ EXPORT_SYMBOL_GPL(nf_conntrack_htable_size);
unsigned int nf_conntrack_max __read_mostly;
EXPORT_SYMBOL_GPL(nf_conntrack_max);

unsigned int nf_conntrack_pkt_threshold __read_mostly;
EXPORT_SYMBOL(nf_conntrack_pkt_threshold);

DEFINE_PER_CPU(struct nf_conn, nf_conntrack_untracked);
EXPORT_PER_CPU_SYMBOL(nf_conntrack_untracked);

@@ -1245,6 +1248,9 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,
			  unsigned long extra_jiffies,
			  int do_acct)
{
	struct nf_conn_acct *acct;
	u64 pkts;

	NF_CT_ASSERT(ct->timeout.data == (unsigned long)ct);
	NF_CT_ASSERT(skb);

@@ -1272,14 +1278,23 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,

acct:
	if (do_acct) {
		struct nf_conn_acct *acct;

		acct = nf_conn_acct_find(ct);
		if (acct) {
			struct nf_conn_counter *counter = acct->counter;

			atomic64_inc(&counter[CTINFO2DIR(ctinfo)].packets);
			atomic64_add(skb->len, &counter[CTINFO2DIR(ctinfo)].bytes);

			pkts =
			atomic64_read(&counter[CTINFO2DIR(ctinfo)].packets) +
			atomic64_read(&counter[!CTINFO2DIR(ctinfo)].packets);
			/* Report if the packet threshold is reached. */
			if ((nf_conntrack_pkt_threshold > 0) &&
			    (pkts == nf_conntrack_pkt_threshold)) {
				nf_conntrack_event_cache(IPCT_COUNTER, ct);
				nf_conntrack_event_cache(IPCT_PROTOINFO, ct);
				nf_ct_deliver_cached_events(ct);
			}
		}
	}
}
+4 −0
Original line number Diff line number Diff line
@@ -711,6 +711,10 @@ ctnetlink_conntrack_event(unsigned int events, struct nf_ct_event *item)
		if (events & (1 << IPCT_SEQADJ) &&
		    ctnetlink_dump_ct_seq_adj(skb, ct) < 0)
			goto nla_put_failure;

		if (events & (1 << IPCT_COUNTER) &&
		    ctnetlink_dump_acct(skb, ct, 0) < 0)
			goto nla_put_failure;
	}

#ifdef CONFIG_NF_CONNTRACK_MARK
+8 −0
Original line number Diff line number Diff line
@@ -453,6 +453,14 @@ static struct ctl_table nf_ct_sysctl_table[] = {
		.mode		= 0644,
		.proc_handler	= proc_dointvec,
	},
	{
		.procname	= "nf_conntrack_pkt_threshold",
		.data		= &nf_conntrack_pkt_threshold,
		.maxlen		= sizeof(int),
		.mode		= 0644,
		.proc_handler	= proc_dointvec,
	},

	{ }
};