Am Montag, dem 24.04.2023 um 12:46 +0200 schrieb Erez:

On Mon, 24 Apr 2023 at 11:07, Stephan Wurm 
<stephan.w...@a-eberle.de<mailto:stephan.w...@a-eberle.de>> wrote:
Set profile identification according to IEC 62439-3:2016 Appendix B,
when dataset comparison is set to iec62439-3.
This also distinguishes between single-attached (SAC) and doubly-
attached (DAC) clocks.


DAC usually stands for digital analog converter.
https://en.wikipedia.org/wiki/Digital-to-analog_converter
Perhaps you or IEC have a better acronym? Like DbAC? or CA2 and CA1?

Erez

I know, the acronym is not perfect. But I took both SAC (single-attached clock)
and DAC (doubly-attached clock) from the IEC 62439-3 specification I wanted to
implement.

Stephan


Signed-off-by: Stephan Wurm 
<stephan.w...@a-eberle.de<mailto:stephan.w...@a-eberle.de>>
---
 bmc.h    |  1 +
 config.c |  1 +
 port.c   | 25 ++++++++++++++++++++-----
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/bmc.h b/bmc.h
index 2901cda..17e4934 100644
--- a/bmc.h
+++ b/bmc.h
@@ -32,6 +32,7 @@
 enum {
        DS_CMP_IEEE1588,
        DS_CMP_G8275,
+       DS_CMP_IEC62439_3,
 };

 /**
diff --git a/config.c b/config.c
index 28beb3b..f2da24f 100644
--- a/config.c
+++ b/config.c
@@ -160,6 +160,7 @@ static struct config_enum clock_type_enu[] = {
 static struct config_enum dataset_comp_enu[] = {
        { "ieee1588", DS_CMP_IEEE1588 },
        { "G.8275.x", DS_CMP_G8275    },
+       { "iec62439-3", DS_CMP_IEC62439_3 },
        { NULL, 0 },
 };

diff --git a/port.c b/port.c
index c70e5b4..edf76da 100644
--- a/port.c
+++ b/port.c
@@ -873,6 +873,8 @@ static const Octet profile_id_drr[] = {0x00, 0x1B, 0x19, 
0x00, 0x01, 0x00};
 static const Octet profile_id_p2p[] = {0x00, 0x1B, 0x19, 0x00, 0x02, 0x00};
 static const Octet profile_id_8275_1[] = {0x00, 0x19, 0xA7, 0x01, 0x02, 0x03};
 static const Octet profile_id_8275_2[] = {0x00, 0x19, 0xA7, 0x02, 0x01, 0x02};
+static const Octet profile_id_62439_3_SAC[] = {0x00, 0x0C, 0xCD, 0x00, 0x01, 
0x00};
+static const Octet profile_id_62439_3_DAC[] = {0x00, 0x0C, 0xCD, 0x00, 0x01, 
0x30};

 static int port_management_fill_response(struct port *target,
                                         struct ptp_message *rsp, int id)
@@ -893,8 +895,10 @@ static int port_management_fill_response(struct port 
*target,
        struct port_ds_np *pdsnp;
        struct tlv_extra *extra;
        struct PortIdentity pid;
+       const Octet *profile_id;
        const char *ts_label;
        struct portDS *pds;
+       struct config *cfg;
        uint16_t u16;
        uint8_t *buf;
        int datalen;
@@ -967,20 +971,31 @@ static int port_management_fill_response(struct port 
*target,
                buf += sizeof(struct PTPText) + cd->userDescription->length;

                if (target->delayMechanism == DM_P2P) {
-                       memcpy(buf, profile_id_p2p, PROFILE_ID_LEN);
+                       cfg = clock_config(target->clock);
+                       if (config_get_int(cfg, NULL, "dataset_comparison") ==
+                           DS_CMP_IEC62439_3) {
+                               if (target->paired_port) {
+                                       profile_id = profile_id_62439_3_DAC;
+                               } else {
+                                       profile_id = profile_id_62439_3_SAC;
+                               }
+                       } else {
+                               profile_id = profile_id_p2p;
+                       }
                } else {
-                       struct config *cfg = clock_config(target->clock);
+                       cfg = clock_config(target->clock);
                        if (config_get_int(cfg, NULL, "dataset_comparison") ==
                            DS_CMP_G8275) {
                                if (transport_type(target->trp) == 
TRANS_IEEE_802_3) {
-                                       memcpy(buf, profile_id_8275_1, 
PROFILE_ID_LEN);
+                                       profile_id = profile_id_8275_1;
                                } else {
-                                       memcpy(buf, profile_id_8275_2, 
PROFILE_ID_LEN);
+                                       profile_id = profile_id_8275_2;
                                }
                        } else {
-                               memcpy(buf, profile_id_drr, PROFILE_ID_LEN);
+                               profile_id = profile_id_drr;
                        }
                }
+               memcpy(buf, profile_id, PROFILE_ID_LEN);
                buf += PROFILE_ID_LEN;
                datalen = buf - tlv->data;
                break;


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

Reply via email to