aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ti/cpts.c
diff options
context:
space:
mode:
authorStefan Sørensen <stefan.sorensen@spectralink.com>2014-06-27 05:59:10 -0400
committerDavid S. Miller <davem@davemloft.net>2014-07-07 19:57:18 -0400
commitae5c6c6d7bcadfbedefb5fc8ff0ebe2bfa83a0a1 (patch)
treed1071ae8d47415a2575f689e54e35119f541befd /drivers/net/ethernet/ti/cpts.c
parentb9c701edc7ff6ddd522497b0194b0bc3ec1b51a9 (diff)
ptp: Classify ptp over ip over vlan packets
This extends the ptp bpf to also match ptp over ip over vlan packets. The ptp classes are changed to orthogonal bitfields representing version, transport and vlan values to simplify matching. Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ti/cpts.c')
-rw-r--r--drivers/net/ethernet/ti/cpts.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/net/ethernet/ti/cpts.c b/drivers/net/ethernet/ti/cpts.c
index 6b56f85951e5..ab92f67da035 100644
--- a/drivers/net/ethernet/ti/cpts.c
+++ b/drivers/net/ethernet/ti/cpts.c
@@ -256,23 +256,21 @@ static int cpts_match(struct sk_buff *skb, unsigned int ptp_class,
256 u16 ts_seqid, u8 ts_msgtype) 256 u16 ts_seqid, u8 ts_msgtype)
257{ 257{
258 u16 *seqid; 258 u16 *seqid;
259 unsigned int offset; 259 unsigned int offset = 0;
260 u8 *msgtype, *data = skb->data; 260 u8 *msgtype, *data = skb->data;
261 261
262 switch (ptp_class) { 262 if (ptp_class & PTP_CLASS_VLAN)
263 case PTP_CLASS_V1_IPV4: 263 offset += VLAN_HLEN;
264 case PTP_CLASS_V2_IPV4: 264
265 offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN; 265 switch (ptp_class & PTP_CLASS_PMASK) {
266 break; 266 case PTP_CLASS_IPV4:
267 case PTP_CLASS_V1_IPV6: 267 offset += ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
268 case PTP_CLASS_V2_IPV6:
269 offset = OFF_PTP6;
270 break; 268 break;
271 case PTP_CLASS_V2_L2: 269 case PTP_CLASS_IPV6:
272 offset = ETH_HLEN; 270 offset += ETH_HLEN + IP6_HLEN + UDP_HLEN;
273 break; 271 break;
274 case PTP_CLASS_V2_VLAN: 272 case PTP_CLASS_L2:
275 offset = ETH_HLEN + VLAN_HLEN; 273 offset += ETH_HLEN;
276 break; 274 break;
277 default: 275 default:
278 return 0; 276 return 0;