Implement the NULL management message.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>master
parent
1516be04e2
commit
b26a36d493
42
port.c
42
port.c
|
@ -392,6 +392,44 @@ static int port_ignore(struct port *p, struct ptp_message *m)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int port_management_response(struct port *target, struct port *ingress,
|
||||||
|
int id, struct ptp_message *req)
|
||||||
|
{
|
||||||
|
int datalen = 0, err, pdulen, respond = 0;
|
||||||
|
struct management_tlv *tlv;
|
||||||
|
struct ptp_message *rsp;
|
||||||
|
struct PortIdentity pid = port_identity(target);
|
||||||
|
|
||||||
|
rsp = port_management_reply(pid, ingress, req);
|
||||||
|
if (!rsp) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
tlv = (struct management_tlv *) rsp->management.suffix;
|
||||||
|
tlv->type = TLV_MANAGEMENT;
|
||||||
|
tlv->id = id;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case NULL_MANAGEMENT:
|
||||||
|
datalen = 0;
|
||||||
|
respond = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (respond) {
|
||||||
|
tlv->length = sizeof(tlv->id) + datalen;
|
||||||
|
pdulen = rsp->header.messageLength + sizeof(*tlv) + datalen;
|
||||||
|
rsp->header.messageLength = pdulen;
|
||||||
|
rsp->tlv_count = 1;
|
||||||
|
err = msg_pre_send(rsp);
|
||||||
|
if (err) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
err = port_forward(ingress, rsp, pdulen);
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
msg_put(rsp);
|
||||||
|
return respond ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void port_nrate_calculate(struct port *p, tmv_t t3, tmv_t t4, tmv_t c)
|
static void port_nrate_calculate(struct port *p, tmv_t t3, tmv_t t4, tmv_t c)
|
||||||
{
|
{
|
||||||
tmv_t origin2;
|
tmv_t origin2;
|
||||||
|
@ -1564,8 +1602,10 @@ int port_manage(struct port *p, struct port *ingress, struct ptp_message *msg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
mgt = (struct management_tlv *) msg->management.suffix;
|
mgt = (struct management_tlv *) msg->management.suffix;
|
||||||
|
if (port_management_response(p, ingress, mgt->id, msg)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
switch (mgt->id) {
|
switch (mgt->id) {
|
||||||
case NULL_MANAGEMENT:
|
|
||||||
case CLOCK_DESCRIPTION:
|
case CLOCK_DESCRIPTION:
|
||||||
case PORT_DATA_SET:
|
case PORT_DATA_SET:
|
||||||
case LOG_ANNOUNCE_INTERVAL:
|
case LOG_ANNOUNCE_INTERVAL:
|
||||||
|
|
Loading…
Reference in New Issue