linux/include/linux/ptp_mock.h
Vladimir Oltean 40b0425f8b net: ptp: create a mock-up PTP Hardware Clock driver
There are several cases where virtual net devices may benefit from
having a PTP clock, and these have to do with testing. I can see at
least netdevsim and veth as potential users of a common mock-up PTP
hardware clock driver.

The proposed idea is to create an object which emulates PTP clock
operations on top of the unadjustable CLOCK_MONOTONIC_RAW plus a
software-controlled time domain via a timecounter/cyclecounter and then
link that PHC to the netdevsim device.

The driver is fully functional for its intended purpose, and it
successfully passes the PTP selftests.

$ cd tools/testing/selftests/ptp/
$ ./phc.sh /dev/ptp2
TEST: settime                          [ OK ]
TEST: adjtime                          [ OK ]
TEST: adjfreq                          [ OK ]

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20230807193324.4128292-7-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2023-08-09 15:59:21 -07:00

39 lines
670 B
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Mock-up PTP Hardware Clock driver for virtual network devices
*
* Copyright 2023 NXP
*/
#ifndef _PTP_MOCK_H_
#define _PTP_MOCK_H_
struct device;
struct mock_phc;
#if IS_ENABLED(CONFIG_PTP_1588_CLOCK_MOCK)
struct mock_phc *mock_phc_create(struct device *dev);
void mock_phc_destroy(struct mock_phc *phc);
int mock_phc_index(struct mock_phc *phc);
#else
static inline struct mock_phc *mock_phc_create(struct device *dev)
{
return NULL;
}
static inline void mock_phc_destroy(struct mock_phc *phc)
{
}
static inline int mock_phc_index(struct mock_phc *phc)
{
return -1;
}
#endif
#endif /* _PTP_MOCK_H_ */