mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): 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 extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 441 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520071858.739733335@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
70 lines
2.3 KiB
C
70 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* PTP 1588 support
|
|
*
|
|
* This file implements a BPF that recognizes PTP event messages.
|
|
*
|
|
* Copyright (C) 2010 OMICRON electronics GmbH
|
|
*/
|
|
|
|
#ifndef _PTP_CLASSIFY_H_
|
|
#define _PTP_CLASSIFY_H_
|
|
|
|
#include <linux/ip.h>
|
|
#include <linux/skbuff.h>
|
|
|
|
#define PTP_CLASS_NONE 0x00 /* not a PTP event message */
|
|
#define PTP_CLASS_V1 0x01 /* protocol version 1 */
|
|
#define PTP_CLASS_V2 0x02 /* protocol version 2 */
|
|
#define PTP_CLASS_VMASK 0x0f /* max protocol version is 15 */
|
|
#define PTP_CLASS_IPV4 0x10 /* event in an IPV4 UDP packet */
|
|
#define PTP_CLASS_IPV6 0x20 /* event in an IPV6 UDP packet */
|
|
#define PTP_CLASS_L2 0x40 /* event in a L2 packet */
|
|
#define PTP_CLASS_PMASK 0x70 /* mask for the packet type field */
|
|
#define PTP_CLASS_VLAN 0x80 /* event in a VLAN tagged packet */
|
|
|
|
#define PTP_CLASS_V1_IPV4 (PTP_CLASS_V1 | PTP_CLASS_IPV4)
|
|
#define PTP_CLASS_V1_IPV6 (PTP_CLASS_V1 | PTP_CLASS_IPV6) /* probably DNE */
|
|
#define PTP_CLASS_V2_IPV4 (PTP_CLASS_V2 | PTP_CLASS_IPV4)
|
|
#define PTP_CLASS_V2_IPV6 (PTP_CLASS_V2 | PTP_CLASS_IPV6)
|
|
#define PTP_CLASS_V2_L2 (PTP_CLASS_V2 | PTP_CLASS_L2)
|
|
#define PTP_CLASS_V2_VLAN (PTP_CLASS_V2 | PTP_CLASS_VLAN)
|
|
#define PTP_CLASS_L4 (PTP_CLASS_IPV4 | PTP_CLASS_IPV6)
|
|
|
|
#define PTP_EV_PORT 319
|
|
#define PTP_GEN_BIT 0x08 /* indicates general message, if set in message type */
|
|
|
|
#define OFF_PTP_SOURCE_UUID 22 /* PTPv1 only */
|
|
#define OFF_PTP_SEQUENCE_ID 30
|
|
#define OFF_PTP_CONTROL 32 /* PTPv1 only */
|
|
|
|
/* Below defines should actually be removed at some point in time. */
|
|
#define IP6_HLEN 40
|
|
#define UDP_HLEN 8
|
|
#define OFF_IHL 14
|
|
#define IPV4_HLEN(data) (((struct iphdr *)(data + OFF_IHL))->ihl << 2)
|
|
|
|
#if defined(CONFIG_NET_PTP_CLASSIFY)
|
|
/**
|
|
* ptp_classify_raw - classify a PTP packet
|
|
* @skb: buffer
|
|
*
|
|
* Runs a minimal BPF dissector to classify a network packet to
|
|
* determine the PTP class. In case the skb does not contain any
|
|
* PTP protocol data, PTP_CLASS_NONE will be returned, otherwise
|
|
* PTP_CLASS_V1_IPV{4,6}, PTP_CLASS_V2_IPV{4,6} or
|
|
* PTP_CLASS_V2_{L2,VLAN}, depending on the packet content.
|
|
*/
|
|
unsigned int ptp_classify_raw(const struct sk_buff *skb);
|
|
|
|
void __init ptp_classifier_init(void);
|
|
#else
|
|
static inline void ptp_classifier_init(void)
|
|
{
|
|
}
|
|
static inline unsigned int ptp_classify_raw(struct sk_buff *skb)
|
|
{
|
|
return PTP_CLASS_NONE;
|
|
}
|
|
#endif
|
|
#endif /* _PTP_CLASSIFY_H_ */
|