On Fri, Sep 02, 2022 at 12:26:11PM +0530, SyncMonk Technologies wrote:

> diff --git a/clock.c b/clock.c
> index d37bb87..eba0833 100644
> --- a/clock.c
> +++ b/clock.c
> @@ -97,9 +97,10 @@ struct clock {
>       LIST_HEAD(ports_head, port) ports;
>       struct port *uds_rw_port;
>       struct port *uds_ro_port;
> +     struct port *vport_port;
>       struct pollfd *pollfd;
>       int pollfd_valid;
> -     int nports; /* does not include the two UDS ports */
> +     int nports; /* does not include the two UDS ports + 1 Virtual Port */

Keeping the virtual port separate from the others won't work.  Why?

 1975 static void handle_state_decision_event(struct clock *c)
 1976 {
 1977         struct foreign_clock *best = NULL, *fc;
 1978         struct ClockIdentity best_id;
 1979         struct port *piter;
 1980         int fresh_best = 0;
 1981 
 1982         LIST_FOREACH(piter, &c->ports, list) {
 1983                 fc = port_compute_best(piter);
                      ...
 1988         }
              ...

 2022         LIST_FOREACH(piter, &c->ports, list) {
 2023                 enum port_state ps;
 2024                 enum fsm_event event;
 2025                 ps = bmc_state_decision(c, piter, c->dscmp);
                      ...
 2050                 port_dispatch(piter, event, fresh_best);
 2051         }


> @@ -1231,6 +1261,17 @@ struct clock *clock_create(enum clock_type type, 
> struct config *config,
>               pr_err("failed to open the UDS-RO port");
>               return NULL;
>       }
> +
> +     if (c->vport_if) {
> +             c->vport_port = port_open(phc_device, phc_index, timestamping, 
> 0,

Can't use zero as port number.  Ports that participate in BCMA must
also be reported in management queries, and the port numbers are all
positive integers per 1588.

> +                                        c->vport_if, c);
> +             if (!c->vport_port) {
> +                     pr_err("failed to open the Virtual port");
> +                     return NULL;
> +             }
> +             LIST_INSERT_HEAD(&c->ports, c->vport_port, list);
> +             c->nports++;
> +     }
>       clock_fda_changed(c);
>  
>       c->slave_event_monitor = monitor_create(config, c->uds_rw_port);


> @@ -193,6 +193,7 @@ static struct config_enum nw_trans_enu[] = {
>       { "L2",    TRANS_IEEE_802_3 },
>       { "UDPv4", TRANS_UDP_IPV4   },
>       { "UDPv6", TRANS_UDP_IPV6   },
> +     { "vPort", TRANS_VPORT   },

This is unneeded and wrong.  The transport models the network layer
used, and a virtual port uses UNIX Domain Sockets for this.

> @@ -822,6 +823,11 @@ static int port_is_uds(struct port *p)
>       return transport_type(p->trp) == TRANS_UDS;
>  }
>  
> +static int port_is_vport(struct port *p)
> +{
> +     return transport_type(p->trp) == TRANS_VPORT;
> +}
> +

Don't need this.

>  static void port_management_send_error(struct port *p, struct port *ingress,
>                                      struct ptp_message *msg, int error_id)
>  {
> @@ -3266,8 +3272,8 @@ struct port *port_open(const char *phc_device,
>               p->state_machine = clock_slave_only(clock) ? ptp_slave_fsm : 
> ptp_fsm;
>       }
>  
> -     if (port_is_uds(p)) {
> -             ; /* UDS cannot have a PHC. */
> +     if (port_is_uds(p) || port_is_vport(p)) {
> +             ; /* UDS & VPORT cannot have a PHC. */

or this.

>       } else if (!interface_tsinfo_valid(interface)) {
>               pr_warning("%s: get_ts_info not supported", p->log_name);
>       } else if (p->phc_index >= 0 &&

> diff --git a/transport.h b/transport.h
> index 7a7f87b..a4c73d3 100644
> --- a/transport.h
> +++ b/transport.h
> @@ -39,6 +39,7 @@ enum transport_type {
>       TRANS_DEVICENET,
>       TRANS_CONTROLNET,
>       TRANS_PROFINET,
> +     TRANS_VPORT,

Why can't the virtual port function be an option for the UDS port
already in place?

Thanks,
Richard


_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to