Merge the configurable UDS server path branch.
commit
25cf96d4ca
2
clock.c
2
clock.c
|
@ -576,7 +576,7 @@ struct clock *clock_create(int phc_index, struct interface *iface, int count,
|
||||||
struct interface udsif;
|
struct interface udsif;
|
||||||
|
|
||||||
memset(&udsif, 0, sizeof(udsif));
|
memset(&udsif, 0, sizeof(udsif));
|
||||||
snprintf(udsif.name, sizeof(udsif.name), UDS_PATH);
|
snprintf(udsif.name, sizeof(udsif.name), "%s", uds_path);
|
||||||
udsif.transport = TRANS_UDS;
|
udsif.transport = TRANS_UDS;
|
||||||
|
|
||||||
srandom(time(NULL));
|
srandom(time(NULL));
|
||||||
|
|
5
config.c
5
config.c
|
@ -393,6 +393,11 @@ static enum parser_result parse_global_setting(const char *option,
|
||||||
return r;
|
return r;
|
||||||
*cfg->udp6_scope = uval;
|
*cfg->udp6_scope = uval;
|
||||||
|
|
||||||
|
} else if (!strcmp(option, "uds_address")) {
|
||||||
|
if (strlen(value) > MAX_IFNAME_SIZE)
|
||||||
|
return OUT_OF_RANGE;
|
||||||
|
strncpy(cfg->uds_address, value, MAX_IFNAME_SIZE);
|
||||||
|
|
||||||
} else if (!strcmp(option, "logging_level")) {
|
} else if (!strcmp(option, "logging_level")) {
|
||||||
r = get_ranged_int(value, &val,
|
r = get_ranged_int(value, &val,
|
||||||
PRINT_LEVEL_MIN, PRINT_LEVEL_MAX);
|
PRINT_LEVEL_MIN, PRINT_LEVEL_MAX);
|
||||||
|
|
3
config.h
3
config.h
|
@ -27,7 +27,7 @@
|
||||||
#include "sk.h"
|
#include "sk.h"
|
||||||
|
|
||||||
#define MAX_PORTS 8
|
#define MAX_PORTS 8
|
||||||
#define MAX_IFNAME_SIZE 16
|
#define MAX_IFNAME_SIZE 108 /* = UNIX_PATH_MAX */
|
||||||
|
|
||||||
/** Defines a network interface, with PTP options. */
|
/** Defines a network interface, with PTP options. */
|
||||||
struct interface {
|
struct interface {
|
||||||
|
@ -89,6 +89,7 @@ struct config {
|
||||||
unsigned char *ptp_dst_mac;
|
unsigned char *ptp_dst_mac;
|
||||||
unsigned char *p2p_dst_mac;
|
unsigned char *p2p_dst_mac;
|
||||||
unsigned char *udp6_scope;
|
unsigned char *udp6_scope;
|
||||||
|
char *uds_address;
|
||||||
|
|
||||||
int print_level;
|
int print_level;
|
||||||
int use_syslog;
|
int use_syslog;
|
||||||
|
|
|
@ -59,6 +59,7 @@ transportSpecific 0x0
|
||||||
ptp_dst_mac 01:1B:19:00:00:00
|
ptp_dst_mac 01:1B:19:00:00:00
|
||||||
p2p_dst_mac 01:80:C2:00:00:0E
|
p2p_dst_mac 01:80:C2:00:00:0E
|
||||||
udp6_scope 0x0E
|
udp6_scope 0x0E
|
||||||
|
uds_address /var/run/ptp4l
|
||||||
#
|
#
|
||||||
# Default interface options
|
# Default interface options
|
||||||
#
|
#
|
||||||
|
|
1
gPTP.cfg
1
gPTP.cfg
|
@ -57,6 +57,7 @@ clock_servo pi
|
||||||
transportSpecific 0x1
|
transportSpecific 0x1
|
||||||
ptp_dst_mac 01:80:C2:00:00:0E
|
ptp_dst_mac 01:80:C2:00:00:0E
|
||||||
p2p_dst_mac 01:80:C2:00:00:0E
|
p2p_dst_mac 01:80:C2:00:00:0E
|
||||||
|
uds_address /var/run/ptp4l
|
||||||
#
|
#
|
||||||
# Default interface options
|
# Default interface options
|
||||||
#
|
#
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Discover the CFLAGS to use during compilation.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Richard Cochran <richardcochran@gmail.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
#
|
||||||
|
# Look for the clock_adjtime functional prototype in the C library.
|
||||||
|
#
|
||||||
|
user_flags()
|
||||||
|
{
|
||||||
|
dirs=$(echo "" | ${CROSS_COMPILE}cpp -Wp,-v 2>&1 >/dev/null | grep ^" /")
|
||||||
|
for d in $dirs; do
|
||||||
|
files=$(find $d -type f -name time.h)
|
||||||
|
for f in $files; do
|
||||||
|
if grep -q clock_adjtime $f; then
|
||||||
|
printf " -D_GNU_SOURCE -DHAVE_CLOCK_ADJTIME"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Find the most appropriate kernel header for the SIOCSHWTSTAMP ioctl.
|
||||||
|
#
|
||||||
|
# 1. custom kernel or cross build using KBUILD_OUTPUT
|
||||||
|
# 2. sanitized headers installed under /lib/modules/`uname -r`/build
|
||||||
|
# 3. normal build using standard system headers
|
||||||
|
#
|
||||||
|
kernel_flags()
|
||||||
|
{
|
||||||
|
prefix=""
|
||||||
|
tstamp=/usr/include/linux/net_tstamp.h
|
||||||
|
|
||||||
|
if [ "x$KBUILD_OUTPUT" != "x" ]; then
|
||||||
|
# With KBUILD_OUTPUT set, we are building against
|
||||||
|
# either a custom kernel or a cross compiled kernel.
|
||||||
|
build=${KBUILD_OUTPUT}
|
||||||
|
else
|
||||||
|
# If the currently running kernel is a custom build
|
||||||
|
# with the headers installed, then we should use them.
|
||||||
|
build=/lib/modules/`uname -r`/build
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f ${build}${tstamp} ]; then
|
||||||
|
prefix=${build}
|
||||||
|
printf " -I%s/usr/include" $prefix
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -q HWTSTAMP_TX_ONESTEP_SYNC ${prefix}${tstamp}; then
|
||||||
|
printf " -DHAVE_ONESTEP_SYNC"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
flags="$(user_flags)$(kernel_flags)"
|
||||||
|
echo "$flags"
|
14
makefile
14
makefile
|
@ -15,21 +15,12 @@
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
KBUILD_OUTPUT ?= /lib/modules/$(shell uname -r)/build
|
KBUILD_OUTPUT =
|
||||||
|
|
||||||
FEAT_CFLAGS :=
|
|
||||||
ifneq ($(shell grep --no-messages clock_adjtime /usr/include/bits/time.h),)
|
|
||||||
FEAT_CFLAGS += -D_GNU_SOURCE -DHAVE_CLOCK_ADJTIME
|
|
||||||
endif
|
|
||||||
ifneq ($(shell grep --no-messages HWTSTAMP_TX_ONESTEP_SYNC $(KBUILD_OUTPUT)/usr/include/linux/net_tstamp.h),)
|
|
||||||
FEAT_CFLAGS += -DHAVE_ONESTEP_SYNC
|
|
||||||
endif
|
|
||||||
|
|
||||||
DEBUG =
|
DEBUG =
|
||||||
CC = $(CROSS_COMPILE)gcc
|
CC = $(CROSS_COMPILE)gcc
|
||||||
INC = -I$(KBUILD_OUTPUT)/usr/include
|
|
||||||
VER = -DVER=$(version)
|
VER = -DVER=$(version)
|
||||||
CFLAGS = -Wall $(VER) $(INC) $(DEBUG) $(FEAT_CFLAGS) $(EXTRA_CFLAGS)
|
CFLAGS = -Wall $(VER) $(incdefs) $(DEBUG) $(EXTRA_CFLAGS)
|
||||||
LDLIBS = -lm -lrt $(EXTRA_LDFLAGS)
|
LDLIBS = -lm -lrt $(EXTRA_LDFLAGS)
|
||||||
PRG = ptp4l pmc phc2sys hwstamp_ctl
|
PRG = ptp4l pmc phc2sys hwstamp_ctl
|
||||||
OBJ = bmc.o clock.o clockadj.o config.o fault.o fsm.o ptp4l.o mave.o \
|
OBJ = bmc.o clock.o clockadj.o config.o fault.o fsm.o ptp4l.o mave.o \
|
||||||
|
@ -40,6 +31,7 @@ OBJECTS = $(OBJ) hwstamp_ctl.o phc2sys.o pmc.o pmc_common.o sysoff.o
|
||||||
SRC = $(OBJECTS:.o=.c)
|
SRC = $(OBJECTS:.o=.c)
|
||||||
DEPEND = $(OBJECTS:.o=.d)
|
DEPEND = $(OBJECTS:.o=.d)
|
||||||
srcdir := $(dir $(lastword $(MAKEFILE_LIST)))
|
srcdir := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||||
|
incdefs := $(shell $(srcdir)/incdefs.sh)
|
||||||
version := $(shell $(srcdir)/version.sh $(srcdir))
|
version := $(shell $(srcdir)/version.sh $(srcdir))
|
||||||
VPATH = $(srcdir)
|
VPATH = $(srcdir)
|
||||||
|
|
||||||
|
|
55
pmc.8
55
pmc.8
|
@ -1,4 +1,4 @@
|
||||||
.TH PMC 8 "July 2013" "linuxptp"
|
.TH PMC 8 "October 2013" "linuxptp"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
pmc \- PTP management client
|
pmc \- PTP management client
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ pmc \- PTP management client
|
||||||
] [
|
] [
|
||||||
.BI \-i " interface"
|
.BI \-i " interface"
|
||||||
] [
|
] [
|
||||||
|
.BI \-s " uds-address"
|
||||||
|
] [
|
||||||
.BI \-t " transport-specific-field"
|
.BI \-t " transport-specific-field"
|
||||||
] [
|
] [
|
||||||
.B \-v
|
.B \-v
|
||||||
|
@ -41,6 +43,11 @@ updates the specified information and
|
||||||
.BR COMMAND )
|
.BR COMMAND )
|
||||||
initiates the specified event.
|
initiates the specified event.
|
||||||
|
|
||||||
|
By default the management commands are addressed to all ports. The
|
||||||
|
.B TARGET
|
||||||
|
command can be used to select a particular clock and port for the
|
||||||
|
subsequent messages.
|
||||||
|
|
||||||
Command
|
Command
|
||||||
.B help
|
.B help
|
||||||
can be used to get a list of supported actions and management IDs.
|
can be used to get a list of supported actions and management IDs.
|
||||||
|
@ -69,6 +76,10 @@ Specify the domain number in sent messages. The default is 0.
|
||||||
Specify the network interface. The default is /var/run/pmc for the Unix Domain
|
Specify the network interface. The default is /var/run/pmc for the Unix Domain
|
||||||
Socket transport and eth0 for the other transports.
|
Socket transport and eth0 for the other transports.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-s " uds-address"
|
||||||
|
Specifies the address of the server's UNIX domain socket.
|
||||||
|
The default is /var/run/ptp4l.
|
||||||
|
.TP
|
||||||
.BI \-t " transport-specific-field"
|
.BI \-t " transport-specific-field"
|
||||||
Specify the transport specific field in sent messages as a hexadecimal number.
|
Specify the transport specific field in sent messages as a hexadecimal number.
|
||||||
The default is 0x0.
|
The default is 0x0.
|
||||||
|
@ -88,12 +99,52 @@ length TLV values instead.
|
||||||
|
|
||||||
.SH MANAGEMENT IDS
|
.SH MANAGEMENT IDS
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B ANNOUNCE_RECEIPT_TIMEOUT
|
||||||
|
.TP
|
||||||
|
.B CLOCK_ACCURACY
|
||||||
|
.TP
|
||||||
|
.B CLOCK_DESCRIPTION
|
||||||
.TP
|
.TP
|
||||||
.B CURRENT_DATA_SET
|
.B CURRENT_DATA_SET
|
||||||
.TP
|
.TP
|
||||||
|
.B DEFAULT_DATA_SET
|
||||||
|
.TP
|
||||||
|
.B DELAY_MECHANISM
|
||||||
|
.TP
|
||||||
|
.B DOMAIN
|
||||||
|
.TP
|
||||||
|
.B GRANDMASTER_SETTINGS_NP
|
||||||
|
.TP
|
||||||
|
.B LOG_ANNOUNCE_INTERVAL
|
||||||
|
.TP
|
||||||
|
.B LOG_MIN_PDELAY_REQ_INTERVAL
|
||||||
|
.TP
|
||||||
|
.B LOG_SYNC_INTERVAL
|
||||||
|
.TP
|
||||||
|
.B NULL_MANAGEMENT
|
||||||
|
.TP
|
||||||
|
.B PARENT_DATA_SET
|
||||||
|
.TP
|
||||||
|
.B PORT_DATA_SET
|
||||||
|
.TP
|
||||||
|
.B PRIORITY1
|
||||||
|
.TP
|
||||||
|
.B PRIORITY2
|
||||||
|
.TP
|
||||||
|
.B SLAVE_ONLY
|
||||||
|
.TP
|
||||||
|
.B TIMESCALE_PROPERTIES
|
||||||
|
.TP
|
||||||
|
.B TIME_PROPERTIES_DATA_SET
|
||||||
|
.TP
|
||||||
.B TIME_STATUS_NP
|
.B TIME_STATUS_NP
|
||||||
.TP
|
.TP
|
||||||
.B NULL_MANAGEMENT
|
.B TRACEABILITY_PROPERTIES
|
||||||
|
.TP
|
||||||
|
.B USER_DESCRIPTION
|
||||||
|
.TP
|
||||||
|
.B VERSION_NUMBER
|
||||||
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR ptp4l (8)
|
.BR ptp4l (8)
|
||||||
|
|
12
pmc.c
12
pmc.c
|
@ -31,6 +31,7 @@
|
||||||
#include "pmc_common.h"
|
#include "pmc_common.h"
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
#include "tlv.h"
|
#include "tlv.h"
|
||||||
|
#include "uds.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
@ -676,6 +677,7 @@ static void usage(char *progname)
|
||||||
" -h prints this message and exits\n"
|
" -h prints this message and exits\n"
|
||||||
" -i [dev] interface device to use, default 'eth0'\n"
|
" -i [dev] interface device to use, default 'eth0'\n"
|
||||||
" for network and '/var/run/pmc' for UDS.\n"
|
" for network and '/var/run/pmc' for UDS.\n"
|
||||||
|
" -s [path] server address for UDS, default '/var/run/ptp4l'.\n"
|
||||||
" -t [hex] transport specific field, default 0x0\n"
|
" -t [hex] transport specific field, default 0x0\n"
|
||||||
" -v prints the software version and exits\n"
|
" -v prints the software version and exits\n"
|
||||||
" -z send zero length TLV values with the GET actions\n"
|
" -z send zero length TLV values with the GET actions\n"
|
||||||
|
@ -697,7 +699,7 @@ int main(int argc, char *argv[])
|
||||||
/* Process the command line arguments. */
|
/* Process the command line arguments. */
|
||||||
progname = strrchr(argv[0], '/');
|
progname = strrchr(argv[0], '/');
|
||||||
progname = progname ? 1+progname : argv[0];
|
progname = progname ? 1+progname : argv[0];
|
||||||
while (EOF != (c = getopt(argc, argv, "246u""b:d:hi:t:vz"))) {
|
while (EOF != (c = getopt(argc, argv, "246u""b:d:hi:s:t:vz"))) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '2':
|
case '2':
|
||||||
transport_type = TRANS_IEEE_802_3;
|
transport_type = TRANS_IEEE_802_3;
|
||||||
|
@ -720,6 +722,14 @@ int main(int argc, char *argv[])
|
||||||
case 'i':
|
case 'i':
|
||||||
iface_name = optarg;
|
iface_name = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
if (strlen(optarg) > MAX_IFNAME_SIZE) {
|
||||||
|
fprintf(stderr, "path %s too long, max is %d\n",
|
||||||
|
optarg, MAX_IFNAME_SIZE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
strncpy(uds_path, optarg, MAX_IFNAME_SIZE);
|
||||||
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
if (1 == sscanf(optarg, "%x", &c))
|
if (1 == sscanf(optarg, "%x", &c))
|
||||||
transport_specific = c << 4;
|
transport_specific = c << 4;
|
||||||
|
|
6
ptp4l.8
6
ptp4l.8
|
@ -1,4 +1,4 @@
|
||||||
.TH PTP4l 8 "July 2013" "linuxptp"
|
.TH PTP4l 8 "October 2013" "linuxptp"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ptp4l \- PTP Boundary/Ordinary Clock
|
ptp4l \- PTP Boundary/Ordinary Clock
|
||||||
|
|
||||||
|
@ -354,6 +354,10 @@ will be used as the second byte of the primary address. This option
|
||||||
is only relevant with IPv6 transport. See RFC 4291. The default is
|
is only relevant with IPv6 transport. See RFC 4291. The default is
|
||||||
0x0E for the global scope.
|
0x0E for the global scope.
|
||||||
.TP
|
.TP
|
||||||
|
.B uds_address
|
||||||
|
Specifies the address of the UNIX domain socket for receiving local
|
||||||
|
management messages. The default is /var/run/ptp4l.
|
||||||
|
.TP
|
||||||
.B logging_level
|
.B logging_level
|
||||||
The maximum logging level of messages which should be printed.
|
The maximum logging level of messages which should be printed.
|
||||||
The default is 6 (LOG_INFO).
|
The default is 6 (LOG_INFO).
|
||||||
|
|
2
ptp4l.c
2
ptp4l.c
|
@ -32,6 +32,7 @@
|
||||||
#include "sk.h"
|
#include "sk.h"
|
||||||
#include "transport.h"
|
#include "transport.h"
|
||||||
#include "udp6.h"
|
#include "udp6.h"
|
||||||
|
#include "uds.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
@ -111,6 +112,7 @@ static struct config cfg_settings = {
|
||||||
.ptp_dst_mac = ptp_dst_mac,
|
.ptp_dst_mac = ptp_dst_mac,
|
||||||
.p2p_dst_mac = p2p_dst_mac,
|
.p2p_dst_mac = p2p_dst_mac,
|
||||||
.udp6_scope = &udp6_scope,
|
.udp6_scope = &udp6_scope,
|
||||||
|
.uds_address = uds_path,
|
||||||
|
|
||||||
.print_level = LOG_INFO,
|
.print_level = LOG_INFO,
|
||||||
.use_syslog = 1,
|
.use_syslog = 1,
|
||||||
|
|
6
uds.c
6
uds.c
|
@ -30,6 +30,8 @@
|
||||||
#include "transport_private.h"
|
#include "transport_private.h"
|
||||||
#include "uds.h"
|
#include "uds.h"
|
||||||
|
|
||||||
|
char uds_path[MAX_IFNAME_SIZE + 1] = "/var/run/ptp4l";
|
||||||
|
|
||||||
#define UDS_FILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) /*0660*/
|
#define UDS_FILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) /*0660*/
|
||||||
|
|
||||||
struct uds {
|
struct uds {
|
||||||
|
@ -58,7 +60,7 @@ static int uds_open(struct transport *t, char *name, struct fdarray *fda,
|
||||||
}
|
}
|
||||||
memset(&sa, 0, sizeof(sa));
|
memset(&sa, 0, sizeof(sa));
|
||||||
sa.sun_family = AF_LOCAL;
|
sa.sun_family = AF_LOCAL;
|
||||||
strcpy(sa.sun_path, name);
|
strncpy(sa.sun_path, name, sizeof(sa.sun_path) - 1);
|
||||||
|
|
||||||
unlink(name);
|
unlink(name);
|
||||||
|
|
||||||
|
@ -72,7 +74,7 @@ static int uds_open(struct transport *t, char *name, struct fdarray *fda,
|
||||||
/* For client use, pre load the server path. */
|
/* For client use, pre load the server path. */
|
||||||
memset(&sa, 0, sizeof(sa));
|
memset(&sa, 0, sizeof(sa));
|
||||||
sa.sun_family = AF_LOCAL;
|
sa.sun_family = AF_LOCAL;
|
||||||
strcpy(sa.sun_path, UDS_PATH);
|
strncpy(sa.sun_path, uds_path, sizeof(sa.sun_path) - 1);
|
||||||
uds->sa = sa;
|
uds->sa = sa;
|
||||||
uds->len = sizeof(sa);
|
uds->len = sizeof(sa);
|
||||||
|
|
||||||
|
|
3
uds.h
3
uds.h
|
@ -20,13 +20,14 @@
|
||||||
#ifndef HAVE_UDS_H
|
#ifndef HAVE_UDS_H
|
||||||
#define HAVE_UDS_H
|
#define HAVE_UDS_H
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "fd.h"
|
#include "fd.h"
|
||||||
#include "transport.h"
|
#include "transport.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Address of the server.
|
* Address of the server.
|
||||||
*/
|
*/
|
||||||
#define UDS_PATH "/var/run/ptp4l"
|
extern char uds_path[MAX_IFNAME_SIZE + 1];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate an instance of a UDS transport.
|
* Allocate an instance of a UDS transport.
|
||||||
|
|
Loading…
Reference in New Issue