On Wed, Jul 05, 2017 at 05:59:50PM +0800, Hangbin Liu wrote:
> @@ -1502,11 +1506,22 @@ static int port_initialize(struct port *p)
>       if (port_set_announce_tmo(p))
>               goto no_tmo;
>  
> +     /* No need to open rtnl socket on UDS port. */
> +     if (p->announce_span) {

The type is remembered by the transport instance, so you can and
should test for (transport_type(p->trp) == TRANS_UDS).

> +             if (p->fda.fd[FD_RTNL] == -1)
> +                     p->fda.fd[FD_RTNL] = rtnl_open();
> +             if (p->fda.fd[FD_RTNL] == -1)
> +                     goto no_rtnl;

This test causes almost all of the linuxptp-testsuite (clknetsim)
cases to fail.

Originally, the clock.c code allowed rtnl_open() to fail.  I don't
remember why I did that way.  In any case, the program will still work
without the rtnl socket.

Maybe you have an argument why rtnl cannot fail?

> +     } else {
> +             p->fda.fd[FD_RTNL] = -1;
> +     }
> +
>       port_nrate_initialize(p);
>  
>       clock_fda_changed(p->clock);
>       return 0;
>  
> +no_rtnl:
>  no_tmo:
>       transport_close(p->trp, &p->fda);
>  no_tropen:
> @@ -2025,6 +2040,10 @@ void port_close(struct port *p)
>       if (port_is_enabled(p)) {
>               port_disable(p);
>       }
> +
> +     if (p->fda.fd[FD_RTNL] >= 0)
> +             rtnl_close(p->fda.fd[FD_RTNL]);

See?  The test allows for the case when rtnl_open() fails.

>       transport_destroy(p->trp);
>       tsproc_destroy(p->tsproc);
>       if (p->fault_fd >= 0)

> @@ -2242,6 +2279,11 @@ enum fsm_event port_event(struct port *p, int fd_index)
>               pr_debug("port %hu: master sync timeout", portnum(p));
>               port_set_sync_tx_tmo(p);
>               return port_tx_sync(p) ? EV_FAULT_DETECTED : EV_NONE;
> +
> +     case FD_RTNL:
> +             pr_debug("port %hu: link status changed", portnum(p));

The message isn't always true, is it?

Maybe it should say something like "received link status notification".

> +             rtnl_link_status(fd, port_link_status, p);
> +             return port_link_status_get(p) ? EV_FAULT_CLEARED : 
> EV_FAULT_DETECTED;
>       }

Thanks,
Richard

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to