Will be used by phc2sys to find out interfaces corresponding to ports.

Signed-off-by: Jiri Benc <jb...@redhat.com>
---
 clock.c |    9 +++++++++
 port.c  |   16 ++++++++++++++++
 tlv.c   |   20 ++++++++++++++++++++
 tlv.h   |    8 ++++++++
 4 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/clock.c b/clock.c
index 20fea847ef68..c893a58391ce 100644
--- a/clock.c
+++ b/clock.c
@@ -1012,6 +1012,15 @@ int clock_manage(struct clock *c, struct port *p, struct 
ptp_message *msg)
        }
 
        switch (mgt->id) {
+       case PORT_PROPERTIES_NP:
+               if (p != c->port[c->nports]) {
+                       /* Only the UDS port allowed. */
+                       clock_management_send_error(p, msg, NOT_SUPPORTED);
+                       return 0;
+               }
+       }
+
+       switch (mgt->id) {
        case USER_DESCRIPTION:
        case SAVE_IN_NON_VOLATILE_STORAGE:
        case RESET_NON_VOLATILE_STORAGE:
diff --git a/port.c b/port.c
index fa70571678b6..261237654828 100644
--- a/port.c
+++ b/port.c
@@ -760,6 +760,22 @@ static int port_management_fill_response(struct port 
*target,
                datalen = sizeof(*pdsnp);
                respond = 1;
                break;
+       case PORT_PROPERTIES_NP:
+               {
+                       struct port_properties_np *ppn;
+
+                       ppn = (struct port_properties_np *)tlv->data;
+                       ppn->portIdentity = target->portIdentity;
+                       if (target->state == PS_GRAND_MASTER)
+                               ppn->portState = PS_MASTER;
+                       else
+                               ppn->portState = target->state;
+                       ppn->timestamping = target->timestamping;
+                       ptp_text_set(&ppn->interface, target->name);
+                       datalen = sizeof(*ppn) + ppn->interface.length;
+                       respond = 1;
+               }
+               break;
        }
        if (respond) {
                if (datalen % 2) {
diff --git a/tlv.c b/tlv.c
index 8d635c452905..35c9773498be 100644
--- a/tlv.c
+++ b/tlv.c
@@ -270,6 +270,18 @@ static int mgt_post_recv(struct management_tlv *m, 
uint16_t data_len,
                                pen->portNumber[i] = ntohs(pen->portNumber[i]);
                }
                break;
+       case PORT_PROPERTIES_NP:
+               {
+                       struct port_properties_np *ppn;
+
+                       if (data_len < sizeof(struct port_properties_np))
+                               goto bad_length;
+                       ppn = (struct port_properties_np *)m->data;
+                       ppn->portIdentity.portNumber = 
ntohs(ppn->portIdentity.portNumber);
+                       extra_len = sizeof(struct port_properties_np);
+                       extra_len += ppn->interface.length;
+               }
+               break;
        case SAVE_IN_NON_VOLATILE_STORAGE:
        case RESET_NON_VOLATILE_STORAGE:
        case INITIALIZE:
@@ -384,6 +396,14 @@ static void mgt_pre_send(struct management_tlv *m, struct 
tlv_extra *extra)
                        pen->numberPorts = htons(pen->numberPorts);
                }
                break;
+       case PORT_PROPERTIES_NP:
+               {
+                       struct port_properties_np *ppn;
+
+                       ppn = (struct port_properties_np *)m->data;
+                       ppn->portIdentity.portNumber = 
htons(ppn->portIdentity.portNumber);
+               }
+               break;
        }
 }
 
diff --git a/tlv.h b/tlv.h
index dffdabda7d09..4d2f3f41562a 100644
--- a/tlv.h
+++ b/tlv.h
@@ -101,6 +101,7 @@ enum management_action {
 #define DELAY_MECHANISM                                        0x6000
 #define LOG_MIN_PDELAY_REQ_INTERVAL                    0x6001
 #define PORT_DATA_SET_NP                                       0xC002
+#define PORT_PROPERTIES_NP                             0xC005
 
 /* Management error ID values */
 #define RESPONSE_TOO_BIG                               0x0001
@@ -207,6 +208,13 @@ struct port_enumeration_np {
        UInteger16 portNumber[0];
 } PACKED;
 
+struct port_properties_np {
+       struct PortIdentity portIdentity;
+       Enumeration8 portState;
+       Enumeration8 timestamping;
+       struct PTPText interface;
+} PACKED;
+
 enum clock_type {
        CLOCK_TYPE_ORDINARY   = 0x8000,
        CLOCK_TYPE_BOUNDARY   = 0x4000,
-- 
1.7.6.5


------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to