pmc: optional legacy zero length TLV for GET actions.
This patch makes the original behavior of sending the TLV values for GET actions with a length of zero. Signed-off-by: Richard Cochran <richardcochran@gmail.com>master
parent
0650b079f9
commit
b0d789a73e
|
@ -372,7 +372,7 @@ static void *get_mgt_data(struct ptp_message *msg)
|
|||
static int init_pmc(struct clock *clock, int domain_number)
|
||||
{
|
||||
clock->pmc = pmc_create(TRANS_UDS, "/var/run/phc2sys", 0,
|
||||
domain_number, 0);
|
||||
domain_number, 0, 1);
|
||||
if (!clock->pmc) {
|
||||
pr_err("failed to create pmc");
|
||||
return -1;
|
||||
|
|
11
pmc.8
11
pmc.8
|
@ -1,4 +1,4 @@
|
|||
.TH PMC 8 "November 2012" "linuxptp"
|
||||
.TH PMC 8 "July 2013" "linuxptp"
|
||||
.SH NAME
|
||||
pmc \- PTP management client
|
||||
|
||||
|
@ -22,6 +22,8 @@ pmc \- PTP management client
|
|||
.BI \-t " transport-specific-field"
|
||||
] [
|
||||
.B \-v
|
||||
] [
|
||||
.B \-z
|
||||
] [ command ] ...
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
@ -76,6 +78,13 @@ Display a help message.
|
|||
.TP
|
||||
.B \-v
|
||||
Prints the software version and exits.
|
||||
.TP
|
||||
.B \-z
|
||||
The official interpretation of the 1588 standard mandates sending
|
||||
GET actions with valid (but meaningless) TLV values. Therefore the
|
||||
pmc program normally sends GET requests with properly formed TLV
|
||||
values. This option enables the legacy option of sending zero
|
||||
length TLV values instead.
|
||||
|
||||
.SH MANAGEMENT IDS
|
||||
|
||||
|
|
11
pmc.c
11
pmc.c
|
@ -659,6 +659,7 @@ static void usage(char *progname)
|
|||
" for network and '/var/run/pmc' for UDS.\n"
|
||||
" -t [hex] transport specific field, default 0x0\n"
|
||||
" -v prints the software version and exits\n"
|
||||
" -z send zero length TLV values with the GET actions\n"
|
||||
"\n",
|
||||
progname);
|
||||
}
|
||||
|
@ -666,7 +667,7 @@ static void usage(char *progname)
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
char *iface_name = NULL, *progname;
|
||||
int c, cnt, length, tmo = -1, batch_mode = 0;
|
||||
int c, cnt, length, tmo = -1, batch_mode = 0, zero_datalen = 0;
|
||||
char line[1024], *command = NULL;
|
||||
enum transport_type transport_type = TRANS_UDP_IPV4;
|
||||
UInteger8 boundary_hops = 1, domain_number = 0, transport_specific = 0;
|
||||
|
@ -677,7 +678,7 @@ int main(int argc, char *argv[])
|
|||
/* Process the command line arguments. */
|
||||
progname = strrchr(argv[0], '/');
|
||||
progname = progname ? 1+progname : argv[0];
|
||||
while (EOF != (c = getopt(argc, argv, "246u""b:d:hi:t:v"))) {
|
||||
while (EOF != (c = getopt(argc, argv, "246u""b:d:hi:t:vz"))) {
|
||||
switch (c) {
|
||||
case '2':
|
||||
transport_type = TRANS_IEEE_802_3;
|
||||
|
@ -707,6 +708,9 @@ int main(int argc, char *argv[])
|
|||
case 'v':
|
||||
version_show(stdout);
|
||||
return 0;
|
||||
case 'z':
|
||||
zero_datalen = 1;
|
||||
break;
|
||||
case 'h':
|
||||
usage(progname);
|
||||
return 0;
|
||||
|
@ -730,7 +734,8 @@ int main(int argc, char *argv[])
|
|||
print_set_syslog(1);
|
||||
print_set_verbose(1);
|
||||
|
||||
pmc = pmc_create(transport_type, iface_name, boundary_hops, domain_number, transport_specific);
|
||||
pmc = pmc_create(transport_type, iface_name, boundary_hops,
|
||||
domain_number, transport_specific, zero_datalen);
|
||||
if (!pmc) {
|
||||
fprintf(stderr, "failed to create pmc\n");
|
||||
return -1;
|
||||
|
|
|
@ -62,7 +62,7 @@ struct pmc {
|
|||
|
||||
struct pmc *pmc_create(enum transport_type transport_type, char *iface_name,
|
||||
UInteger8 boundary_hops, UInteger8 domain_number,
|
||||
UInteger8 transport_specific)
|
||||
UInteger8 transport_specific, int zero_datalen)
|
||||
{
|
||||
struct pmc *pmc;
|
||||
|
||||
|
@ -92,6 +92,7 @@ struct pmc *pmc_create(enum transport_type transport_type, char *iface_name,
|
|||
pr_err("failed to open transport");
|
||||
goto failed;
|
||||
}
|
||||
pmc->zero_length_gets = zero_datalen ? 1 : 0;
|
||||
|
||||
return pmc;
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ struct pmc;
|
|||
|
||||
struct pmc *pmc_create(enum transport_type transport_type, char *iface_name,
|
||||
UInteger8 boundary_hops, UInteger8 domain_number,
|
||||
UInteger8 transport_specific);
|
||||
UInteger8 transport_specific, int zero_datalen);
|
||||
|
||||
void pmc_destroy(struct pmc *pmc);
|
||||
|
||||
|
|
Loading…
Reference in New Issue