On Mon, Nov 09, 2020 at 01:44:57PM -0800, Richard Cochran wrote:
> The PMC agent's implementation should not be exposed to its users.  This
> patch hides the details and provides a method to create an instance.  In
> addition, the signature of the receive callback is made generic, removing
> the container_of pattern meant for sub-classing modules.
> 
> Signed-off-by: Richard Cochran <richardcoch...@gmail.com>
> ---
>  phc2sys.c   | 75 +++++++++++++++++++++++++++++------------------------
>  pmc_agent.c | 58 ++++++++++++++++++++++++++++++++++++-----
>  pmc_agent.h | 62 +++++++++++++++++++++++++++++++------------
>  3 files changed, 137 insertions(+), 58 deletions(-)
> 
> diff --git a/phc2sys.c b/phc2sys.c
> index c1eab1b..9e47b4f 100644
> --- a/phc2sys.c
> +++ b/phc2sys.c
> @@ -1020,11 +1017,12 @@ int main(int argc, char *argv[])
>  {
>       char *config = NULL, *dst_name = NULL, *progname, *src_name = NULL;
>       char uds_local[MAX_IFNAME_SIZE + 1];
> +     int autocfg = 0, c, domain_number = 0, index, ntpshm_segment, offset;
> +     int pps_fd = -1, print_level = LOG_INFO, r = -1, rt = 0;
> +     int wait_sync = 0;
>       struct clock *src, *dst;
>       struct config *cfg;
>       struct option *opts;
> -     int autocfg = 0, c, domain_number = 0, index, ntpshm_segment;
> -     int pps_fd = -1, print_level = LOG_INFO, r = -1, rt = 0, wait_sync = 0;
>       double phc_rate, tmp;
>       struct phc2sys_private priv = {
>               .phc_readings = 5,

This change looks a bit noisy when all it does is introduce the "offset"
variable, but ok.

> diff --git a/pmc_agent.c b/pmc_agent.c
> index e83895c..8ccafe2 100644
> --- a/pmc_agent.c
> +++ b/pmc_agent.c
> @@ -19,6 +19,7 @@
>   */
>  #include <net/if.h>
>  #include <poll.h>
> +#include <stdlib.h>
>  
>  #include "notification.h"
>  #include "pmc_agent.h"
> @@ -32,6 +33,22 @@
>   * renewed.
>   */
>  
> +struct pmc_agent {
> +     struct pmc *pmc;
> +     uint64_t pmc_last_update;
> +
> +     struct ClockIdentity clock_identity;
> +     int clock_identity_set;
> +     int leap;
> +     int pmc_ds_requested;
> +     int sync_offset;
> +     int utc_offset_traceable;
> +
> +     /* Callback on message reception */
> +     pmc_node_recv_subscribed_t *recv_subscribed;
> +     void *recv_context;

Now that the pmc_agent is going to have a more 'stable' interface, I
wonder if this callback is even properly placed in struct pmc_agent and
shouldn't be a simple argument passed to run_pmc_events(), considering
that this is the only place where it's called from. It would also
simplify the implementation, with those "excluded" managementId's.

Of course, that can come later.

> +};
> +
>  static void send_subscription(struct pmc_agent *node)
>  {
>       struct subscribe_events_np sen;
> @@ -58,5 +46,45 @@ int run_pmc_get_utc_offset(struct pmc_agent *agent, int 
> timeout);
>  int get_mgt_id(struct ptp_message *msg);
>  void *get_mgt_data(struct ptp_message *msg);
>  
> -#endif
>  
> +/**
> + * Creates an instance of a PMC agent.
> + * @return  Pointer to a PMC instance on sauces, NULL otherwise.

Sauces?

> + */
> +struct pmc_agent *pmc_agent_create(void);


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

Reply via email to