Thank you very much for your fast reply and the notes. Please find below a modified patch according to your annotations: --- diff -rwbBu a/config.c b/config.c --- a/config.c 2015-09-19 16:25:11.000000000 +0200 +++ b/config.c 2016-07-06 17:07:38.176449373 +0200 @@ -226,6 +226,8 @@ PORT_ITEM_INT("syncReceiptTimeout", 0, 0, UINT8_MAX), GLOB_ITEM_INT("timeSource", INTERNAL_OSCILLATOR, 0x10, 0xfe), GLOB_ITEM_ENU("time_stamping", TS_HARDWARE, timestamping_enu), + GLOB_ITEM_INT("tos_event", 0, 0, 0x3F), + GLOB_ITEM_INT("tos_general", 0, 0, 0x3F), PORT_ITEM_INT("transportSpecific", 0, 0, 0x0F), PORT_ITEM_ENU("tsproc_mode", TSPROC_FILTER, tsproc_enu), GLOB_ITEM_INT("twoStepFlag", 1, 0, 1), @@ -235,7 +237,7 @@ GLOB_ITEM_STR("uds_address", "/var/run/ptp4l"), GLOB_ITEM_INT("use_syslog", 1, 0, 1), GLOB_ITEM_STR("userDescription", ""), - GLOB_ITEM_INT("verbose", 0, 0, 1), + GLOB_ITEM_INT("verbose", 0, 0, 1) }; static enum parser_result diff -rwbBu a/default.cfg b/default.cfg --- a/default.cfg 2015-09-19 16:25:11.000000000 +0200 +++ b/default.cfg 2016-07-06 16:49:36.853140183 +0200 @@ -12,6 +12,8 @@ offsetScaledLogVariance 0xFFFF free_running 0 freq_est_interval 1 +tos_event 0 +tos_general 0 # # Port Data Set # diff -rwbBu a/ptp4l.8 b/ptp4l.8 --- a/ptp4l.8 2015-09-19 16:25:11.000000000 +0200 +++ b/ptp4l.8 2016-07-06 16:58:23.722698053 +0200 @@ -446,6 +446,14 @@ Specifies the address of the UNIX domain socket for receiving local management messages. The default is /var/run/ptp4l. .TP +.B tos_event +Defines the Differentiated Services Codepoint (DSCP) to be used for PTP +event messages. Must be a value between 0 and 63. The default is 0. +.TP +.B tos_general +Defines the Differentiated Services Codepoint (DSCP) to be used for PTP +general messages. Must be a value between 0 and 63. The default is 0. +.TP .B logging_level The maximum logging level of messages which should be printed. The default is 6 (LOG_INFO). diff -rwbBu a/sk.c b/sk.c --- a/sk.c 2015-09-19 16:25:11.000000000 +0200 +++ b/sk.c 2016-07-06 16:40:27.000000000 +0200 @@ -35,6 +35,7 @@ #include "missing.h" #include "print.h" #include "sk.h" +#include "config.h" /* globals */ @@ -78,6 +79,28 @@ return 0; } +static int set_priority(int fd, uint8_t dscp) { + int tos; + socklen_t tos_len; + + tos_len = sizeof(tos); + if (getsockopt(fd, SOL_IP, IP_TOS, &tos, &tos_len) < 0) { + tos = 0; + } + + /* clear old DSCP value */ + tos &= ~0xFC; + + /* set new DSCP value */ + tos |= dscp<<2; + tos_len = sizeof(tos); + if (setsockopt(fd, SOL_IP, IP_TOS, &tos, tos_len) < 0) { + return -1; + } + + return 0; +} + /* public methods */ int sk_interface_index(int fd, const char *name) @@ -105,6 +128,24 @@ return 0; } +int sk_set_priority(struct config *c, int event_fd, int general_fd) { + uint8_t event_dscp = config_get_int(c, NULL, "tos_event"); + uint8_t general_dscp = config_get_int(c, NULL, "tos_general"); + + int err = 0; + + if(event_dscp != 0) { + err = set_priority(event_fd, event_dscp); + } + + if(!err && general_dscp) { + err = set_priority(general_fd, general_dscp); + } + + return err; +} + + int sk_get_ts_info(const char *name, struct sk_ts_info *sk_info) { #ifdef ETHTOOL_GET_TS_INFO diff -rwbBu a/sk.h b/sk.h --- a/sk.h 2015-09-19 16:25:11.000000000 +0200 +++ b/sk.h 2016-07-06 16:38:36.000000000 +0200 @@ -55,6 +55,16 @@ int sk_general_init(int fd); /** + * Set DSCP value for socket. + * @param c Current linuxptp configuration. + * @param event_fd Open socket for ptp event messages. + * @param general_fd Open socket for ptp general messages. + * @return Zero in success, negative on failure + * + */ +int sk_set_priority(struct config *c, int event_fd, int general_fd); + +/** * Obtain supported timestamping information * @param name The name of the interface * @param info Struct containing obtained timestamping information. diff -rwbBu a/udp6.c b/udp6.c --- a/udp6.c 2015-09-19 16:25:11.000000000 +0200 +++ b/udp6.c 2016-07-06 16:39:48.000000000 +0200 @@ -196,6 +196,10 @@ if (sk_general_init(gfd)) goto no_timestamping; + if(sk_set_priority(t->cfg, efd, gfd) < 0) { + pr_warning("Failure on setting DSCP priority."); + } + fda->fd[FD_EVENT] = efd; fda->fd[FD_GENERAL] = gfd; return 0; diff -rwbBu a/udp.c b/udp.c --- a/udp.c 2015-09-19 16:25:11.000000000 +0200 +++ b/udp.c 2016-07-06 16:39:27.000000000 +0200 @@ -186,6 +186,10 @@ if (sk_general_init(gfd)) goto no_timestamping; + if(sk_set_priority(t->cfg, efd, gfd) < 0) { + pr_warning("Failure on setting DSCP priority."); + } + fda->fd[FD_EVENT] = efd; fda->fd[FD_GENERAL] = gfd; return 0; ---
Best regards Henry Jesuiter ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel