The standard requires management TLV in replies to commands: An acknowledge management message is a response to a command management message. The value of the managementId shall be identical to that in the command message. (Table 38)
Just copy the TLV from the request. Signed-off-by: Jiri Benc <jb...@redhat.com> --- clock.c | 3 +++ msg.c | 17 +++++++++++++++++ msg.h | 11 +++++++++++ 3 files changed, 31 insertions(+), 0 deletions(-) diff --git a/clock.c b/clock.c index 600fc058a391..c66a04064ff8 100644 --- a/clock.c +++ b/clock.c @@ -18,6 +18,7 @@ */ #include <errno.h> #include <poll.h> +#include <stddef.h> #include <stdlib.h> #include <string.h> #include <time.h> @@ -452,6 +453,8 @@ static int clock_management_cmd_response(struct clock *c, struct port *p, pr_err("failed to allocate response message"); return 1; } + msg_copy_tlv(rsp, offsetof(struct ptp_message, management.suffix), + req, 0); if (port_prepare_and_send(p, rsp, 0)) pr_err("failed to send response message"); msg_put(rsp); diff --git a/msg.c b/msg.c index 7edbdd2619b5..7b958e30bef9 100644 --- a/msg.c +++ b/msg.c @@ -470,3 +470,20 @@ int msg_sots_missing(struct ptp_message *m) } return (!m->hwts.ts.tv_sec && !m->hwts.ts.tv_nsec) ? 1 : 0; } + +void msg_copy_tlv(struct ptp_message *dest, unsigned int dest_base, + struct ptp_message *src, unsigned int src_base) +{ + unsigned int len; + + if (!src_base) + src_base = dest_base; + + len = src->header.messageLength; + if (len <= src_base) + return; + len -= src_base; + memcpy((void *)dest + dest_base, (void *)src + src_base, len); + dest->header.messageLength = dest_base + len; + dest->tlv_count = src->tlv_count; +} diff --git a/msg.h b/msg.h index 3fa58338f07a..4a58f065b214 100644 --- a/msg.h +++ b/msg.h @@ -339,6 +339,17 @@ void msg_put(struct ptp_message *m); int msg_sots_missing(struct ptp_message *m); /** + * Copy TLVs from one message into another. + * @param dest Destination message. + * @param dest_base Offset of the suffix in the destination message. + * @param src Source message. + * @param src_base Offset of the suffix in the source message; 0 to use + * the value in dest_base. + */ +void msg_copy_tlv(struct ptp_message *dest, unsigned int dest_base, + struct ptp_message *src, unsigned int src_base); + +/** * Work around buggy 802.1AS switches. */ extern int assume_two_step; -- 1.7.6.5 ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available. Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel