|
1 Add support for hybrid mode of operation. An user can provide -U option |
|
2 to ptpd to have hybrid mode enabled. ptpd version higher than 2.2.0 may have |
|
3 hybrid mode enabled by default in which case this patch should be removed. |
|
4 |
|
5 diff -r 1a6514e3570d src/Makefile |
|
6 --- a/src/Makefile Fri Apr 03 18:07:43 2015 -0700 |
|
7 +++ b/src/Makefile Fri Apr 03 21:12:39 2015 -0700 |
|
8 @@ -43,7 +43,7 @@ |
|
9 #CFLAGS += -DDBG_SIGUSR2_CHANGE_DEBUG |
|
10 #CFLAGS += -DPTPD_FULL_OPTIONS |
|
11 |
|
12 -#CFLAGS += -DPTP_EXPERIMENTAL |
|
13 +CFLAGS += -DPTP_EXPERIMENTAL |
|
14 |
|
15 LDFLAGS+= -lm -lrt |
|
16 LDFLAGS += -lnsl -lsocket -lv12n -m64 |
|
17 diff -r 1a6514e3570d src/datatypes.h |
|
18 --- a/src/datatypes.h Fri Apr 03 18:07:43 2015 -0700 |
|
19 +++ b/src/datatypes.h Fri Apr 03 21:12:39 2015 -0700 |
|
20 @@ -473,6 +473,11 @@ |
|
21 |
|
22 Statistics statistics; |
|
23 |
|
24 +#ifdef PTP_EXPERIMENTAL |
|
25 + Integer32 MasterAddr; // used for hybrid mode, when receiving announces |
|
26 + Integer32 LastSlaveAddr; // used for hybrid mode, when receiving delayreqs |
|
27 +#endif |
|
28 + |
|
29 } PtpClock; |
|
30 |
|
31 /** |
|
32 diff -r 1a6514e3570d src/dep/datatypes_dep.h |
|
33 --- a/src/dep/datatypes_dep.h Fri Apr 03 18:07:43 2015 -0700 |
|
34 +++ b/src/dep/datatypes_dep.h Fri Apr 03 21:12:39 2015 -0700 |
|
35 @@ -133,6 +133,12 @@ |
|
36 |
|
37 /* used by IGMP refresh */ |
|
38 struct in_addr interfaceAddr; |
|
39 + |
|
40 +#ifdef PTP_EXPERIMENTAL |
|
41 + /* used for Hybrid mode */ |
|
42 + Integer32 lastRecvAddr; |
|
43 +#endif |
|
44 + |
|
45 } NetPath; |
|
46 |
|
47 #endif /*DATATYPES_DEP_H_*/ |
|
48 diff -r 1a6514e3570d src/dep/msg.c |
|
49 --- a/src/dep/msg.c Fri Apr 03 18:07:43 2015 -0700 |
|
50 +++ b/src/dep/msg.c Fri Apr 03 21:12:39 2015 -0700 |
|
51 @@ -40,6 +40,10 @@ |
|
52 |
|
53 #include "../ptpd.h" |
|
54 |
|
55 +#ifdef PTP_EXPERIMENTAL |
|
56 +extern RunTimeOpts rtOpts; |
|
57 +#endif |
|
58 + |
|
59 /*Unpack Header from IN buffer to msgTmpHeader field */ |
|
60 void |
|
61 msgUnpackHeader(Octet * buf, MsgHeader * header) |
|
62 @@ -328,6 +332,12 @@ |
|
63 /* Table 19 */ |
|
64 *(UInteger16 *) (buf + 2) = flip16(DELAY_RESP_LENGTH); |
|
65 *(UInteger8 *) (buf + 4) = header->domainNumber; |
|
66 + |
|
67 +#ifdef PTP_EXPERIMENTAL |
|
68 + if(rtOpts.do_hybrid_mode) |
|
69 + *(char *)(buf + 6) |= PTP_UNICAST; |
|
70 +#endif |
|
71 + |
|
72 memset((buf + 8), 0, 8); |
|
73 |
|
74 /* Copy correctionField of PdelayReqMessage */ |
|
75 diff -r 1a6514e3570d src/dep/startup.c |
|
76 --- a/src/dep/startup.c Fri Apr 03 18:07:43 2015 -0700 |
|
77 +++ b/src/dep/startup.c Fri Apr 03 21:12:39 2015 -0700 |
|
78 @@ -662,7 +662,7 @@ |
|
79 #endif |
|
80 */ |
|
81 |
|
82 - const char *getopt_string = "?HgGWb:cCf:ST:dDPR:xO:tM:a:w:u:ehzl:o:i:n:N:y:m:v:r:s:p:q:Y:BjLV:XZKF"; |
|
83 + const char *getopt_string = "?HgGWb:cCf:ST:dDPR:xO:tM:a:w:u:ehzl:o:i:n:N:y:m:v:r:s:p:q:Y:BjLV:XZKFU"; |
|
84 |
|
85 /* parse command line arguments */ |
|
86 while ((c = getopt(argc, argv, getopt_string)) != -1) { |
|
87 --- a/src/ptpd2.8 2015-05-18 14:05:20.934031705 -0700 |
|
88 +++ b/src/ptpd2.8 2015-05-18 13:59:54.195214157 -0700 |
|
89 @@ -27,6 +27,7 @@ |
|
90 [-b NAME] |
|
91 [-K] |
|
92 [-u ADDRESS] |
|
93 +[-U] |
|
94 [-e] |
|
95 [-h] |
|
96 [-l NUMBER,NUMBER] |
|
97 @@ -204,6 +205,9 @@ |
|
98 .B \-u ADDRESS |
|
99 also send uni-cast to ADDRESS |
|
100 .TP |
|
101 +.B \-U |
|
102 +enable hybrid mode which uses both unicast and multicast |
|
103 +.TP |
|
104 .B \-e |
|
105 run in ethernet mode (currently unimplemented) |
|
106 .TP |