On Wed, Jul 06, 2016 at 01:32:26PM +0000, Jesuiter, Henry (ALC NetworX GmbH) 
wrote:
> Oh yes, my fault. Please find it below:
> 
> ---
> Index: config.c
> ===================================================================
> --- config.c  (Revision 827)
> +++ config.c  (Revision 830)
> @@ -236,6 +236,8 @@
>       GLOB_ITEM_INT("use_syslog", 1, 0, 1),
>       GLOB_ITEM_STR("userDescription", ""),
>       GLOB_ITEM_INT("verbose", 0, 0, 1),
> +     GLOB_ITEM_INT("tosEventMessage", 56, 0, 63),
> +     GLOB_ITEM_INT("tosGeneralMessage", 46, 0, 46)

Default should be zero.

Since this is a bit field (isn't it?), max would make more sense as
hexadecimal value.

Keep the table in alphabetical order please.

The options should be all lower case, like 'tos_event'.  (We only use
lowerCamelCase when the option comes from a published standard.)

>  };
>  
>  static enum parser_result
> Index: udp.c
> ===================================================================
> --- udp.c     (Revision 827)
> +++ udp.c     (Revision 830)
> @@ -149,6 +149,29 @@
>       return -1;
>  }
>  
> +// setting IP DSCP value here
> +static int set_priority(int sock_fd, uint8_t dscp) {

No C++ comments, K&R style.  Please check CODING_STYLE.org.

> +     int tos;
> +     socklen_t tos_len;
> +
> +     if (!sock_fd) {

This test is useless, because the caller ensures that the FD is valid.

> +             return 0;
> +     }
> +
> +     tos_len = sizeof(tos);
> +     if (getsockopt(sock_fd, SOL_IP, IP_TOS, &tos, &tos_len) < 0) {
> +             tos = 0;
> +     }
> +
> +     tos |= dscp<<2;

You need to clear the bit field first.

> +     tos_len = sizeof(tos);
> +     if (setsockopt(sock_fd, SOL_IP, IP_TOS, &tos, tos_len) < 0) {
> +             return -1;
> +     }
> +
> +     return 0;
> +}
> +
>  enum { MC_PRIMARY, MC_PDELAY };
>  
>  static struct in_addr mcast_addr[2];
> @@ -176,11 +199,23 @@
>       if (efd < 0)
>               goto no_event;
>  
> +     // set DSCP priority for event messages
> +     uint8_t event_dscp = config_get_int(t->cfg, NULL, "tosEventMessage");
> +     if(set_priority(efd, event_dscp) < 0) {
          ^
Coding style.

Only call set_priority if dscp != 0.

Both of these calls should happen *after* sk_general_init.  (It not
wrong as is, but it would fit better to the existing code which does
first opens the sockets, then configures them.)

> +             pr_warning("Could not set COS value for PTP event messages.");
> +     }
> +
>       gfd = open_socket(name, mcast_addr, GENERAL_PORT, ttl);
>       if (gfd < 0)
>               goto no_general;
>  
> -     if (sk_timestamping_init(efd, name, ts_type, TRANS_UDP_IPV4))
> +     // set DSCP priority for general messages
> +     uint8_t general_dscp = config_get_int(t->cfg, NULL, 
> "tosGeneralMessage");
> +     if(set_priority(gfd, general_dscp) < 0) {
> +             pr_warning("Could not set DHCP value for PTP general 
> messages.");

DSCP.

> +     }
> +
> +     if (sk_timestamping_init(efd, name, ts_type, TRANS_UDP_IPV4))
>               goto no_timestamping;
>  
>       if (sk_general_init(gfd))
> 
> Index: udp6.c
> ===================================================================
> --- udp6.c    (Revision 827)
> +++ udp6.c    (Revision 830)
> @@ -157,6 +157,29 @@
>       return -1;
>  }
>  
> +// setting IP DSCP value here
> +static int set_priority(int sock_fd, uint8_t dscp) {

This function is a duplicate of the one above, so it should go into
sk.c with the other shared code.

> +     int tos;
> +     socklen_t tos_len;
> +
> +     if (!sock_fd) {
> +             return 0;
> +     }
> +
> +             tos_len = sizeof(tos);
> +     if (getsockopt(sock_fd, SOL_IP, IP_TOS, &tos, &tos_len) < 0) {
> +             tos = 0;
> +     }
> +
> +     tos |= dscp<<2;
> +     tos_len = sizeof(tos);
> +     if (setsockopt(sock_fd, SOL_IP, IP_TOS, &tos, tos_len) < 0) {
> +             return -1;
> +     }
> +
> +     return 0;
> +}
> +
>  enum { MC_PRIMARY, MC_PDELAY };
>  
>  static struct in6_addr mc6_addr[2];
> @@ -186,11 +209,23 @@
>       if (efd < 0)
>               goto no_event;
>  
> +     // set DSCP priority for event messages
> +     uint8_t event_dscp = config_get_int(t->cfg, NULL, "tosEventMessage");
> +     if(set_priority(efd, event_dscp) < 0) {
> +             pr_warning("Could not set COS value for PTP event messages.");
> +     }
> +
>       gfd = open_socket_ipv6(name, mc6_addr, GENERAL_PORT, &udp6->index, 
> hop_limit);
>       if (gfd < 0)
>               goto no_general;
>  
> -     if (sk_timestamping_init(efd, name, ts_type, TRANS_UDP_IPV6))
> +     // set DSCP priority for general messages
> +     uint8_t general_dscp = config_get_int(t->cfg, NULL, 
> "tosGeneralMessage");
> +     if(set_priority(gfd, general_dscp) < 0) {
> +             pr_warning("Could not set DHCP value for PTP general 
> messages.");
> +     }
> +
> +     if (sk_timestamping_init(efd, name, ts_type, TRANS_UDP_IPV6))
>               goto no_timestamping;
>  
>       if (sk_general_init(gfd))

This would look better if you had a helper in sk.c:

        int sk_set_priority(int efd, int gfd);

Then you would have in udp.c/udp6.c:

        if (sk_set_priority(efd, gfd)) {
                pr_warning("Failed to set the DSCP priority.");
        }

Thanks,
Richard

------------------------------------------------------------------------------
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

Reply via email to