struct hwtstamp_config.rx_filter passed to SIOCSHWTSTAMP can be updated by the kernel with the value of HWTSTAMP_FILTER_SOME. That indicates that all requested packets will be timestamped, and some others as well.
Update hwts_init() to recognize this as a valid response, instead of rejecting it as mismatch. Cc: "Keller, Jacob E" <jacob.e.kel...@intel.com> Signed-off-by: Petr Machata <pe...@mellanox.com> --- Notes: v3: - Do not permit HWTSTAMP_FILTER_SOME for SIOCGHWTSTAMP. v2: - Fix whitespace. sk.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sk.c b/sk.c index 93ba77a..8fda9c2 100644 --- a/sk.c +++ b/sk.c @@ -61,6 +61,7 @@ static int hwts_init(int fd, const char *device, int rx_filter, { struct ifreq ifreq; struct hwtstamp_config cfg; + int orig_rx_filter; int err; init_ifreq(&ifreq, &cfg, device); @@ -81,17 +82,19 @@ static int hwts_init(int fd, const char *device, int rx_filter, pr_err("ioctl SIOCSHWTSTAMP failed: %m"); return err; } + if (cfg.rx_filter == HWTSTAMP_FILTER_SOME) + cfg.rx_filter = rx_filter; break; case HWTS_FILTER_NORMAL: cfg.tx_type = tx_type; - cfg.rx_filter = rx_filter; + cfg.rx_filter = orig_rx_filter = rx_filter; err = ioctl(fd, SIOCSHWTSTAMP, &ifreq); if (err < 0) { pr_info("driver rejected most general HWTSTAMP filter"); init_ifreq(&ifreq, &cfg, device); cfg.tx_type = tx_type; - cfg.rx_filter = rx_filter2; + cfg.rx_filter = orig_rx_filter = rx_filter2; err = ioctl(fd, SIOCSHWTSTAMP, &ifreq); if (err < 0) { @@ -99,6 +102,8 @@ static int hwts_init(int fd, const char *device, int rx_filter, return err; } } + if (cfg.rx_filter == HWTSTAMP_FILTER_SOME) + cfg.rx_filter = orig_rx_filter; break; } -- 2.20.1 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel