Commit 77980f04 authored by Eliot Blennerhassett's avatar Eliot Blennerhassett Committed by Aurelio Colosimo

gptp: add gptp_mode, use peer mcast addr

gPTP uses the peer multicast address for all packets
Signed-off-by: 's avatarEliot Blennerhassett <eblennerhassett@audioscience.com>
parent 2d0d01c1
......@@ -137,7 +137,11 @@ int posix_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
hdr = PROTO_HDR(pkt);
hdr->h_proto = htons(ETH_P_1588);
memcpy(hdr->h_dest, PP_MCAST_MACADDRESS, ETH_ALEN);
if (OPTS(ppi)->gptp_mode)
memcpy(hdr->h_dest, PP_PEER_MACADDRESS, ETH_ALEN);
else
memcpy(hdr->h_dest, PP_MCAST_MACADDRESS, ETH_ALEN);
/* raw socket implementation always uses gen socket */
memcpy(hdr->h_source, NP(ppi)->ch[PP_NP_GEN].addr, ETH_ALEN);
return send(NP(ppi)->ch[PP_NP_GEN].fd, hdr,
......@@ -228,6 +232,11 @@ int posix_open_ch(struct pp_instance *ppi, char *ifname, int chtype)
setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP,
&pmr, sizeof(pmr)); /* lazily ignore errors */
/* also the PEER multicast address */
memcpy(pmr.mr_address, PP_PEER_MACADDRESS, ETH_ALEN);
setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP,
&pmr, sizeof(pmr)); /* lazily ignore errors */
NP(ppi)->ch[chtype].fd = sock;
/* make timestamps available through recvmsg() -- FIXME: hw? */
......
......@@ -58,6 +58,9 @@ int main(int argc, char **argv)
if (pp_parse_cmdline(ppi, argc, argv) != 0)
return -1;
if (OPTS(ppi)->ethernet_mode)
OPTS(ppi)->gptp_mode = 1;
posix_main_loop(ppi);
return 0; /* never reached */
}
......@@ -14,6 +14,7 @@
#define PP_DEFAULT_OUTBOUND_LATENCY 0 /* in nsec */
#define PP_DEFAULT_NO_RESET_CLOCK 0
#define PP_DEFAULT_ETHERNET_MODE 0
#define PP_DEFAULT_GPTP_MODE 0
#define PP_DEFAULT_DOMAIN_NUMBER 0
#define PP_DEFAULT_DELAY_MECHANISM P2P
#define PP_DEFAULT_AP 10
......
......@@ -42,6 +42,7 @@ struct pp_runtime_opts {
csv_stats:1,
ethernet_mode:1,
e2e_mode:1,
gptp_mode:1,
ofst_first_updated:1,
no_rst_clk:1,
use_syslog:1;
......
......@@ -117,6 +117,9 @@ void msg_unpack_header(struct pp_instance *ppi, void *buf)
void msg_pack_header(struct pp_instance *ppi, void *buf)
{
Nibble transport = 0x80;
if (OPTS(ppi)->gptp_mode)
transport = 0x10;
/* (spec annex D) */
*(UInteger8 *) (buf + 0) = transport;
......
......@@ -20,6 +20,7 @@ struct pp_runtime_opts default_rt_opts = {
.ai = PP_DEFAULT_AI,
.s = PP_DEFAULT_DELAY_S,
.ethernet_mode = PP_DEFAULT_ETHERNET_MODE,
.gptp_mode = PP_DEFAULT_GPTP_MODE,
.max_foreign_records = PP_DEFAULT_MAX_FOREIGN_RECORDS,
.cur_utc_ofst = PP_DEFAULT_UTC_OFFSET,
.announce_intvl = PP_DEFAULT_ANNOUNCE_INTERVAL,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment