parse_hwtimestamp(char *line)
{
CNF_HwTsInterface *iface;
- char *p;
+ char *p, filter[5];
int n;
if (!*line) {
iface->name = Strdup(p);
iface->minpoll = 0;
iface->nocrossts = 0;
+ iface->rxfilter = CNF_HWTS_RXFILTER_NTP;
iface->precision = 100.0e-9;
iface->tx_comp = 0.0;
iface->rx_comp = 0.0;
} else if (!strcasecmp(p, "txcomp")) {
if (sscanf(line, "%lf%n", &iface->tx_comp, &n) != 1)
break;
+ } else if (!strcasecmp(p, "rxfilter")) {
+ if (sscanf(line, "%4s%n", filter, &n) != 1)
+ break;
+ if (!strcasecmp(filter, "none"))
+ iface->rxfilter = CNF_HWTS_RXFILTER_NONE;
+ else if (!strcasecmp(filter, "ntp"))
+ iface->rxfilter = CNF_HWTS_RXFILTER_NTP;
+ else if (!strcasecmp(filter, "all"))
+ iface->rxfilter = CNF_HWTS_RXFILTER_ALL;
+ else
+ break;
} else if (!strcasecmp(p, "nocrossts")) {
n = 0;
iface->nocrossts = 1;
extern int CNF_GetInitSources(void);
extern double CNF_GetInitStepThreshold(void);
+#define CNF_HWTS_RXFILTER_NONE 0
+#define CNF_HWTS_RXFILTER_NTP 1
+#define CNF_HWTS_RXFILTER_ALL 2
+
typedef struct {
char *name;
int minpoll;
int nocrossts;
+ int rxfilter;
double precision;
double tx_comp;
double rx_comp;
ts_config.flags = 0;
ts_config.tx_type = HWTSTAMP_TX_ON;
+
+ switch (conf_iface->rxfilter) {
+ case CNF_HWTS_RXFILTER_NONE:
+ ts_config.rx_filter = HWTSTAMP_FILTER_NONE;
+ break;
+ case CNF_HWTS_RXFILTER_NTP:
#ifdef HAVE_LINUX_TIMESTAMPING_RXFILTER_NTP
- if (ts_info.rx_filters & (1 << HWTSTAMP_FILTER_NTP_ALL))
- ts_config.rx_filter = HWTSTAMP_FILTER_NTP_ALL;
- else
+ if (ts_info.rx_filters & (1 << HWTSTAMP_FILTER_NTP_ALL)) {
+ ts_config.rx_filter = HWTSTAMP_FILTER_NTP_ALL;
+ break;
+ }
#endif
- ts_config.rx_filter = HWTSTAMP_FILTER_ALL;
+ /* Fall through */
+ default:
+ ts_config.rx_filter = HWTSTAMP_FILTER_ALL;
+ break;
+ }
+
req.ifr_data = (char *)&ts_config;
if (ioctl(sock_fd, SIOCSHWTSTAMP, &req)) {