aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/net
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2014-03-28 18:58:22 +0100
committerDavid S. Miller <davem@davemloft.net>2014-03-31 00:45:09 -0400
commit164d8c6665213c931645578310256da7b1259331 (patch)
tree336d19cb5fd510a3aaf6b1eb908f256c0cb9ee09 /net
parentnet: ptp: use sk_unattached_filter_create() for BPF (diff)
downloadwireguard-linux-164d8c6665213c931645578310256da7b1259331.tar.xz
wireguard-linux-164d8c6665213c931645578310256da7b1259331.zip
net: ptp: do not reimplement PTP/BPF classifier
There are currently pch_gbe, cpts, and ixp4xx_eth drivers that open-code and reimplement a BPF classifier for the PTP protocol. Since all of them effectively do the very same thing and load the very same PTP/BPF filter, we can just consolidate that code by introducing ptp_classify_raw() in the time-stamping core framework which can be used in drivers. As drivers get initialized after bootstrapping the core networking subsystem, they can make use of ptp_insns wrapped through ptp_classify_raw(), which allows to simplify and remove PTP classifier setup code in drivers. Joint work with Alexei Starovoitov. Signed-off-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: Alexei Starovoitov <ast@plumgrid.com> Cc: Richard Cochran <richard.cochran@omicron.at> Cc: Jiri Benc <jbenc@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/timestamping.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/core/timestamping.c b/net/core/timestamping.c
index e43d56acf803..9ff26b3cc021 100644
--- a/net/core/timestamping.c
+++ b/net/core/timestamping.c
@@ -25,11 +25,17 @@
static struct sk_filter *ptp_insns __read_mostly;
+unsigned int ptp_classify_raw(const struct sk_buff *skb)
+{
+ return SK_RUN_FILTER(ptp_insns, skb);
+}
+EXPORT_SYMBOL_GPL(ptp_classify_raw);
+
static unsigned int classify(const struct sk_buff *skb)
{
if (likely(skb->dev && skb->dev->phydev &&
skb->dev->phydev->drv))
- return SK_RUN_FILTER(ptp_insns, skb);
+ return ptp_classify_raw(skb);
else
return PTP_CLASS_NONE;
}