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, ...@@ -137,7 +137,11 @@ int posix_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
hdr = PROTO_HDR(pkt); hdr = PROTO_HDR(pkt);
hdr->h_proto = htons(ETH_P_1588); 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 */ /* raw socket implementation always uses gen socket */
memcpy(hdr->h_source, NP(ppi)->ch[PP_NP_GEN].addr, ETH_ALEN); memcpy(hdr->h_source, NP(ppi)->ch[PP_NP_GEN].addr, ETH_ALEN);
return send(NP(ppi)->ch[PP_NP_GEN].fd, hdr, 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) ...@@ -228,6 +232,11 @@ int posix_open_ch(struct pp_instance *ppi, char *ifname, int chtype)
setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP,
&pmr, sizeof(pmr)); /* lazily ignore errors */ &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; NP(ppi)->ch[chtype].fd = sock;
/* make timestamps available through recvmsg() -- FIXME: hw? */ /* make timestamps available through recvmsg() -- FIXME: hw? */
......
...@@ -58,6 +58,9 @@ int main(int argc, char **argv) ...@@ -58,6 +58,9 @@ int main(int argc, char **argv)
if (pp_parse_cmdline(ppi, argc, argv) != 0) if (pp_parse_cmdline(ppi, argc, argv) != 0)
return -1; return -1;
if (OPTS(ppi)->ethernet_mode)
OPTS(ppi)->gptp_mode = 1;
posix_main_loop(ppi); posix_main_loop(ppi);
return 0; /* never reached */ return 0; /* never reached */
} }
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#define PP_DEFAULT_OUTBOUND_LATENCY 0 /* in nsec */ #define PP_DEFAULT_OUTBOUND_LATENCY 0 /* in nsec */
#define PP_DEFAULT_NO_RESET_CLOCK 0 #define PP_DEFAULT_NO_RESET_CLOCK 0
#define PP_DEFAULT_ETHERNET_MODE 0 #define PP_DEFAULT_ETHERNET_MODE 0
#define PP_DEFAULT_GPTP_MODE 0
#define PP_DEFAULT_DOMAIN_NUMBER 0 #define PP_DEFAULT_DOMAIN_NUMBER 0
#define PP_DEFAULT_DELAY_MECHANISM P2P #define PP_DEFAULT_DELAY_MECHANISM P2P
#define PP_DEFAULT_AP 10 #define PP_DEFAULT_AP 10
......
...@@ -42,6 +42,7 @@ struct pp_runtime_opts { ...@@ -42,6 +42,7 @@ struct pp_runtime_opts {
csv_stats:1, csv_stats:1,
ethernet_mode:1, ethernet_mode:1,
e2e_mode:1, e2e_mode:1,
gptp_mode:1,
ofst_first_updated:1, ofst_first_updated:1,
no_rst_clk:1, no_rst_clk:1,
use_syslog:1; use_syslog:1;
......
...@@ -117,6 +117,9 @@ void msg_unpack_header(struct pp_instance *ppi, void *buf) ...@@ -117,6 +117,9 @@ void msg_unpack_header(struct pp_instance *ppi, void *buf)
void msg_pack_header(struct pp_instance *ppi, void *buf) void msg_pack_header(struct pp_instance *ppi, void *buf)
{ {
Nibble transport = 0x80; Nibble transport = 0x80;
if (OPTS(ppi)->gptp_mode)
transport = 0x10;
/* (spec annex D) */ /* (spec annex D) */
*(UInteger8 *) (buf + 0) = transport; *(UInteger8 *) (buf + 0) = transport;
......
...@@ -20,6 +20,7 @@ struct pp_runtime_opts default_rt_opts = { ...@@ -20,6 +20,7 @@ struct pp_runtime_opts default_rt_opts = {
.ai = PP_DEFAULT_AI, .ai = PP_DEFAULT_AI,
.s = PP_DEFAULT_DELAY_S, .s = PP_DEFAULT_DELAY_S,
.ethernet_mode = PP_DEFAULT_ETHERNET_MODE, .ethernet_mode = PP_DEFAULT_ETHERNET_MODE,
.gptp_mode = PP_DEFAULT_GPTP_MODE,
.max_foreign_records = PP_DEFAULT_MAX_FOREIGN_RECORDS, .max_foreign_records = PP_DEFAULT_MAX_FOREIGN_RECORDS,
.cur_utc_ofst = PP_DEFAULT_UTC_OFFSET, .cur_utc_ofst = PP_DEFAULT_UTC_OFFSET,
.announce_intvl = PP_DEFAULT_ANNOUNCE_INTERVAL, .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