mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
Merge branch 'ptp-is_sync'
Kurt Kanzenbach says: ==================== ptp: Add generic is_sync() function as multiple PHY drivers such as micrel or TI dp83640 need to inspect whether a given skb represents a PTP Sync message, provide a generic function for it. This avoids code duplication and can be reused by future PHY IEEE 1588 implementations. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
cd0b6277c3
@ -970,17 +970,6 @@ static void decode_status_frame(struct dp83640_private *dp83640,
|
||||
}
|
||||
}
|
||||
|
||||
static int is_sync(struct sk_buff *skb, int type)
|
||||
{
|
||||
struct ptp_header *hdr;
|
||||
|
||||
hdr = ptp_parse_header(skb, type);
|
||||
if (!hdr)
|
||||
return 0;
|
||||
|
||||
return ptp_get_msgtype(hdr, type) == PTP_MSGTYPE_SYNC;
|
||||
}
|
||||
|
||||
static void dp83640_free_clocks(void)
|
||||
{
|
||||
struct dp83640_clock *clock;
|
||||
@ -1396,7 +1385,7 @@ static void dp83640_txtstamp(struct mii_timestamper *mii_ts,
|
||||
switch (dp83640->hwts_tx_en) {
|
||||
|
||||
case HWTSTAMP_TX_ONESTEP_SYNC:
|
||||
if (is_sync(skb, type)) {
|
||||
if (ptp_msg_is_sync(skb, type)) {
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
@ -1976,17 +1976,6 @@ static int lan8814_hwtstamp(struct mii_timestamper *mii_ts, struct ifreq *ifr)
|
||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ? -EFAULT : 0;
|
||||
}
|
||||
|
||||
static bool is_sync(struct sk_buff *skb, int type)
|
||||
{
|
||||
struct ptp_header *hdr;
|
||||
|
||||
hdr = ptp_parse_header(skb, type);
|
||||
if (!hdr)
|
||||
return false;
|
||||
|
||||
return ((ptp_get_msgtype(hdr, type) & 0xf) == 0);
|
||||
}
|
||||
|
||||
static void lan8814_txtstamp(struct mii_timestamper *mii_ts,
|
||||
struct sk_buff *skb, int type)
|
||||
{
|
||||
@ -1994,7 +1983,7 @@ static void lan8814_txtstamp(struct mii_timestamper *mii_ts,
|
||||
|
||||
switch (ptp_priv->hwts_tx_type) {
|
||||
case HWTSTAMP_TX_ONESTEP_SYNC:
|
||||
if (is_sync(skb, type)) {
|
||||
if (ptp_msg_is_sync(skb, type)) {
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
@ -126,6 +126,17 @@ static inline u8 ptp_get_msgtype(const struct ptp_header *hdr,
|
||||
return msgtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* ptp_msg_is_sync - Evaluates whether the given skb is a PTP Sync message
|
||||
* @skb: packet buffer
|
||||
* @type: type of the packet (see ptp_classify_raw())
|
||||
*
|
||||
* This function evaluates whether the given skb is a PTP Sync message.
|
||||
*
|
||||
* Return: true if sync message, false otherwise
|
||||
*/
|
||||
bool ptp_msg_is_sync(struct sk_buff *skb, unsigned int type);
|
||||
|
||||
void __init ptp_classifier_init(void);
|
||||
#else
|
||||
static inline void ptp_classifier_init(void)
|
||||
@ -148,5 +159,9 @@ static inline u8 ptp_get_msgtype(const struct ptp_header *hdr,
|
||||
*/
|
||||
return PTP_MSGTYPE_SYNC;
|
||||
}
|
||||
static inline bool ptp_msg_is_sync(struct sk_buff *skb, unsigned int type)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
#endif /* _PTP_CLASSIFY_H_ */
|
||||
|
@ -137,6 +137,18 @@ struct ptp_header *ptp_parse_header(struct sk_buff *skb, unsigned int type)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ptp_parse_header);
|
||||
|
||||
bool ptp_msg_is_sync(struct sk_buff *skb, unsigned int type)
|
||||
{
|
||||
struct ptp_header *hdr;
|
||||
|
||||
hdr = ptp_parse_header(skb, type);
|
||||
if (!hdr)
|
||||
return false;
|
||||
|
||||
return ptp_get_msgtype(hdr, type) == PTP_MSGTYPE_SYNC;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ptp_msg_is_sync);
|
||||
|
||||
void __init ptp_classifier_init(void)
|
||||
{
|
||||
static struct sock_filter ptp_filter[] __initdata = {
|
||||
|
Loading…
Reference in New Issue
Block a user