Release 4.11 net/core/timestamping.c
/*
* PTP 1588 clock support - support for timestamping in PHY devices
*
* Copyright (C) 2010 OMICRON electronics GmbH
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/errqueue.h>
#include <linux/phy.h>
#include <linux/ptp_classify.h>
#include <linux/skbuff.h>
#include <linux/export.h>
static unsigned int classify(const struct sk_buff *skb)
{
if (likely(skb->dev && skb->dev->phydev &&
skb->dev->phydev->drv))
return ptp_classify_raw(skb);
else
return PTP_CLASS_NONE;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Richard Cochran | 43 | 93.48% | 1 | 25.00% |
Daniel Borkmann | 2 | 4.35% | 2 | 50.00% |
Eric Dumazet | 1 | 2.17% | 1 | 25.00% |
Total | 46 | 100.00% | 4 | 100.00% |
void skb_clone_tx_timestamp(struct sk_buff *skb)
{
struct phy_device *phydev;
struct sk_buff *clone;
unsigned int type;
if (!skb->sk)
return;
type = classify(skb);
if (type == PTP_CLASS_NONE)
return;
phydev = skb->dev->phydev;
if (likely(phydev->drv->txtstamp)) {
clone = skb_clone_sk(skb);
if (!clone)
return;
phydev->drv->txtstamp(phydev, clone, type);
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Richard Cochran | 86 | 92.47% | 1 | 33.33% |
Stefan Sörensen | 4 | 4.30% | 1 | 33.33% |
Alexander Duyck | 3 | 3.23% | 1 | 33.33% |
Total | 93 | 100.00% | 3 | 100.00% |
EXPORT_SYMBOL_GPL(skb_clone_tx_timestamp);
bool skb_defer_rx_timestamp(struct sk_buff *skb)
{
struct phy_device *phydev;
unsigned int type;
if (!skb->dev || !skb->dev->phydev || !skb->dev->phydev->drv)
return false;
if (skb_headroom(skb) < ETH_HLEN)
return false;
__skb_push(skb, ETH_HLEN);
type = ptp_classify_raw(skb);
__skb_pull(skb, ETH_HLEN);
if (type == PTP_CLASS_NONE)
return false;
phydev = skb->dev->phydev;
if (likely(phydev->drv->rxtstamp))
return phydev->drv->rxtstamp(phydev, skb, type);
return false;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Richard Cochran | 76 | 61.79% | 1 | 25.00% |
Alexander Duyck | 27 | 21.95% | 1 | 25.00% |
Eric Dumazet | 14 | 11.38% | 1 | 25.00% |
Stefan Sörensen | 6 | 4.88% | 1 | 25.00% |
Total | 123 | 100.00% | 4 | 100.00% |
EXPORT_SYMBOL_GPL(skb_defer_rx_timestamp);
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Richard Cochran | 228 | 79.17% | 3 | 27.27% |
Alexander Duyck | 30 | 10.42% | 2 | 18.18% |
Eric Dumazet | 15 | 5.21% | 2 | 18.18% |
Stefan Sörensen | 10 | 3.47% | 1 | 9.09% |
Paul Gortmaker | 3 | 1.04% | 1 | 9.09% |
Daniel Borkmann | 2 | 0.69% | 2 | 18.18% |
Total | 288 | 100.00% | 11 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.