EXPIRED Neat GPS clock SFP module - $20

Notice: Page may contain affiliate links for which we may earn a small commission through services like Amazon Affiliates or Skimlinks.

SnJ9MX

Active Member
Jul 18, 2019
130
84
28
Yeah, I emailed their support contact to see if they would give me a better firmware, others may want to try as well. I'll end up using PTP to sync an NTP server in software if this is the only firmware we get.
got mine to work as expected in a different switch and got a fixed location (albeit with a not great accuracy compared to some other survey-in stuff I've recently done). I haven't really use PTP. in case we don't get NTP - what's the process for getting other devices to pick up/read/use the PTP multicast packets spewed out from this thing?
 

nexox

Well-Known Member
May 3, 2023
699
285
63
I haven't spent a lot of time figuring it put yet, but there is are ptpd and ptp4l projects, the latter seems preferable based on skimming the readme on github. Hardware support on the NIC seems important but not required, and most of my onboard Intel 1G ports do support most of the hardware stuff, but my ConnectX-5 doesn't, that could be a driver issue because I have been messing around with it a bit.
 

SnJ9MX

Active Member
Jul 18, 2019
130
84
28
Wiggling the module helped. Not sure what's going on what that - likely something loose internally. Using only the PTP functionality, I was able to get a proxmox box synchronized to +/- 100 ns of the Nokia OSA 5401 module relatively easily, with periods of +/- 10 ns.

On the OSA 5401, I set the MAC to be the ether type broadcast (L2 only). This was required because the only interface is assigned to the bridge. L3 packets were sent to the bridge. L2 packets were interpreted without issue. (not an expert on level 2/3 ether packets here, probably using the wrong words to describe things, the ether packets do come through to VMs on the same vmbr0 as well, but the VMs don't have HW timestamp capabilities).

configure clock l2-profiles master mac 01-1b-19-00-00-00

I also fudged with the rates, left at 1/sec for the announce and dresp-sync messages.

I installed linuxptp, then on the proxmox host,

eno1 is the interface
-2 is level 2 protocol
-m is debug prints to console
-s is slave
--domain=24 to match the OSA 5401 default (4 for L3 and 24 for L2, not sure if that's factory default or not. mine had some 10.255 addresses left over in the config)

ptp4l -i eno1 -2 -m -s --domain=24

that creates /dev/ptp0.

in another window, for debug purposes:
-s interface
-m mesages to console
-O is seconds of offset for TAI/UTC conversion. currently -37 (seeing 37.0s offset in chrony was odd)

phc2sys -s /dev/ptp0 -m -O -37

that's to ensure things are good. real use is for chrony:

/etc/chrony/chrony.conf:
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37

restart chrony and judge your results. in this screenshot, both pi-ntp and piaware are PPS disciplined Raspberry Pi 3B modules. pi-ntp is connected via ethernet and has a GT-U7 GPS module. piaware is connected via wifi (on roof) and has a LEA-6T GPS module. host is a Dell Precision 3431 which has I219-LM doing PTP duties.

Code:
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
PHC0                       30  14    29     -0.000      0.011     -0ns   132ns
pf-new.home.fluffnet.net   14   7   976     +0.236      0.207   +913us    56us
pi-ntp.home.fluffnet.net   56  29    61     +0.009      0.384    -59us    14us
prox-3070.home.fluffnet.>  16  10   969     +0.061      0.141  -3502ns    45us
piaware.home.fluffnet.net  64  35   972     -0.413      1.712  -1432us  1265us

MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
#* PHC0                          0   0   377     2    -29ns[  -33ns] +/-   76ns
^- pf-new.home.fluffnet.net      2   6   377    34   +828us[ +828us] +/-   11ms
^? pi-ntp.home.fluffnet.net      1   0   377     1    +44us[  +44us] +/-  328us
^- prox-3070.home.fluffnet.>     2   6   377    41    -29us[  -29us] +/-  405us
^- piaware.home.fluffnet.net     2   4   377    12   -683us[ -683us] +/- 4665us

Reference ID    : 50484330 (PHC0)
Stratum         : 1
Ref time (UTC)  : Mon Apr 15 20:46:42 2024
System time     : 0.000000010 seconds fast of NTP time
Last offset     : -0.000000004 seconds
RMS offset      : 0.000000045 seconds
Frequency       : 0.133 ppm slow
Residual freq   : -0.000 ppm
Skew            : 0.011 ppm
Root delay      : 0.000000001 seconds
Root dispersion : 0.000001539 seconds
Update interval : 1.0 seconds
Leap status     : Normal
here's my full config:

Code:
ADVA--> show running-config
show running-config (1/5)
clock l2-profiles
  domain-number   : 24
  profile         : g8275.1
  port-delay-asym : 0
  master multicast: enabled
   mac            : 01-1B-19-00-00-00
   rate announce  : 1 pps
   rate dresp-sync: 1 pps
   priority2      : 128
  slave           : disabled
   mac            : 01-80-C2-00-00-0E
   delay-asym     : 0
clock l3-profiles
  domain-number   : 4
  profile         : g8265.1
  port-delay-asym : 0
  ip-details
   ip-address     : 10.98.1.197
   netmask        : 255.255.255.0
   default-gw     : 0.0.0.0
   vlan-id        : 4095
   vlan-pcp       : 7
   ip-priority    : none
  master unicast  : disabled
  master multicast: disabled
   rate announce  : 2 pps
   rate dresp-sync: 8 pps
  master
   priority2      : 128
  slave           : disabled
   mode           : unicast
   rate announce  : 8 pps
   rate dresp-sync: 128 pps
   acceptable-masters
    primary       : 0.0.0.0
     delay-asym   : 0
    backup        : 0.0.0.0
     delay-asym   : 0

Press <enter> to continue

*** Running configuration has been changed and needs to be saved. ***
ADVA:show:running-config:-->
show running-config continues (2/5)
clock gnss       : enabled
  mode            : gps+glonass
  antenna-delay   : 0
  elevation       : 5 deg
  snr             : 9 dBHz
  location        : survey-in
   latitude       : N00.0000000
   longitude      : E00.0000000
   altitude       : 0 cm
  forced-antenna-c: disabled
clock type       : etsi
port ethernet
  tx-ssm          : enabled
  synce           : master
  rx-quality-level: ssm-based
port sci
  direction       : output
  signal          : pps
  rx-quality-level: prc

Press <enter> to continue

*** Running configuration has been changed and needs to be saved. ***
ADVA:show:running-config:-->
show running-config continues (3/5)
management host
  ip-address : 10.98.1.199
  netmask    : 255.255.255.0
  default-gw : 10.98.1.1
  vlan-id    : 1
  vlan-pcp   : 7
  ip-priority: none
system
  telnet     : disabled
  tftp       : disabled
  ssh        : enabled
  scp        : enabled
  snmp       : enabled
  leds       : enabled
  syslog     : enabled
   address 1 : 10.255.160.63:2011
   address 2 : 0.0.0.0:514
  radius     : disabled
   auth-type : pap
   access-or.: local
   primary   : 0.0.0.0:1812
    secret   :
    timeout  : 2
    retries  : 3
   backup    : 0.0.0.0:1812
    secret   :
    timeout  : 2
    retries  : 3
  ne-name    : 7WDC209A_OSA_5401
  engine-id  : 800015af030
  ne-contact : OSA_5401_Contact
  ne-location: OSA_5401_Location
  ne-physical-alias    : OSA_5401_Physical-alias
  ne_physical-asset-id : OSA_5401_Physical-asset-id

Press <enter> to continue

*** Running configuration has been changed and needs to be saved. ***
ADVA:show:running-config:-->
show running-config continues (4/5)
syncjack
  rawdata_server
   protocol       : ftp
   username       : root
   ip-address     : 0.0.0.0
  clock-accuracy 1
   measurem. type : frequency
   rate           : 1-Hz
   source         : synce
   reference      : gnss
  clock-accuracy 2
   measurem. type : frequency
   rate           : 1-Hz
   source         : synce
   reference      : gnss
  clock-analysis 1
   measurem. type : phase
   rate           : 1-Hz
   source         : ptp
   reference      : gnss
   direction      : master-to-slave
  clock-analysis 2
   measurem. type : phase
   rate           : 1-Hz
   source         : ptp
   reference      : gnss
   direction      : master-to-slave
management alarm severity
  time-freerun   : not-reported
  time-holdover  : not-reported
  time-traceable : major
  freq-freerun   : not-reported
  freq-holdover  : not-reported
  freq-traceable : major
  error-antenna  : major
  sync-timeout   : minor
  ann-timeout    : minor
  dresp-timeout  : minor
  loss-of-ann    : not-reported
  loss-of-sync   : not-reported
  sj-fail-time   : major
  sj-fail-freq   : major
  equip-fault    : critical
  equip-mismatch : critical
  sfp-mismatch   : critical
  sfp-removed    : critical
  sfp-tx-fault   : critical
  sfp-not-qualif : not-reported


Press <enter> to continue

*** Running configuration has been changed and needs to be saved. ***
ADVA:show:running-config:-->
show running-config continues (5/5)
...SNMP snip...
 

nexox

Well-Known Member
May 3, 2023
699
285
63
Thanks for the config details, I got started figuring it out but ran into this issue with missing software tx timestamps in the Solarflare driver: Thread: [Linuxptp-users] Software timestamping | linuxptp

I kind of assumed that using client only mode -s would mean I didn't need any TX capabilities, but that's not how the check is implemented. I guess I need to patch my kernel or work on removing the module from the port it's stuck in...
 

SnJ9MX

Active Member
Jul 18, 2019
130
84
28
Thanks for the config details, I got started figuring it out but ran into this issue with missing software tx timestamps in the Solarflare driver: Thread: [Linuxptp-users] Software timestamping | linuxptp

I kind of assumed that using client only mode -s would mean I didn't need any TX capabilities, but that's not how the check is implemented. I guess I need to patch my kernel or work on removing the module from the port it's stuck in...
yesterday I also got it working on a raspberry pi 3b that only has software timestamps (but it does have software TX timestamp):
Code:
austin@raspberrypi:~ $ uname -a
Linux raspberrypi 5.15.32-v7+ #1538 SMP Thu Mar 31 19:38:48 BST 2022 armv7l GNU/Linux
austin@raspberrypi:~ $ ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
        software-transmit
        software-receive
        software-system-clock
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none
austin@raspberrypi:~ $ sudo ptp4l -2 -m -i eth0 -S --domain=24
ptp4l[819459.550]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[819459.552]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[819459.675]: port 1: new foreign master 0080ea.fffe.d03040-2
ptp4l[819460.180]: selected best master clock 0080ea.fffe.d03040
ptp4l[819460.180]: updating UTC offset to 37
ptp4l[819460.180]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[819461.978]: port 1: minimum delay request interval 2^-4
ptp4l[819462.954]: rms 13678 max 21673 freq  -1564 +/-   0 delay 73291 +/- 899
ptp4l[819463.963]: rms 13014 max 20264 freq  -1564 +/-   0 delay 78088 +/- 1529
ptp4l[819464.972]: rms 10390 max 17526 freq  -1564 +/-   0 delay 75776 +/- 1220
ptp4l[819465.981]: rms 12360 max 19359 freq  -1564 +/-   0 delay 72534 +/- 2215
ptp4l[819466.990]: rms 13058 max 20903 freq  -1564 +/-   0 delay 75743 +/- 1267
 
  • Like
Reactions: pixelBit and nexox

nexox

Well-Known Member
May 3, 2023
699
285
63
Well I finally pulled my NIC out to remove the module, the SMA jack definitely seemed loose, so I opened it up, and sure enough, it had broken loose. I'm pretty sure there's enough left of the pads to fix it, but not today. I am rather surprised it ever worked at all.
1000019348.jpg
 
  • Like
Reactions: pixelBit

aeg

Member
May 6, 2019
25
34
13
Well I finally pulled my NIC out to remove the module, the SMA jack definitely seemed loose, so I opened it up, and sure enough, it had broken loose. I'm pretty sure there's enough left of the pads to fix it, but not today. I am rather surprised it ever worked at all.
What's involved in opening up the module? Does it just pull apart?
 

nexox

Well-Known Member
May 3, 2023
699
285
63
What's involved in opening up the module? Does it just pull apart?
Carefully pry up the ends of the RF shielding skirt thing and lift it off the module, there are two screws under that, then you can pry it apart, sliding the latch parts back and forth until they align correctly to release the cover. I also removed the wire pull loop but I don't think that was necessary.
 
  • Like
Reactions: aeg

SnJ9MX

Active Member
Jul 18, 2019
130
84
28
I tested my module in 2x SFP switches that didn't have any fans. It was hit or miss to get the GPS lock, mostly with no sats detected at all. I found if it did obtain a lock, it would drop out early afternoon (in my garage). Thought this might be a temperature related thing so I popped it in my ICX6450-48P. It locked as expected (within the TTFF) and has been locked on since (3+ days now).
 
  • Like
Reactions: nexox

piranha32

Active Member
Mar 4, 2023
250
180
43
If I could decode the markings correctly from the picture, it's a Spansion chip, with 8 pins it makes it a perfect candidate for configuration flash
 
  • Like
Reactions: nexox

nexox

Well-Known Member
May 3, 2023
699
285
63
Alright I got mine soldered back together, installed in a ConnectX 4 with hardware timestamp support, and configured - linuxptp actually has another tool to set everything up from a single config file - timemaster.

My timemaster.conf file (using ntpd) looks like:

Code:
[timemaster]
ntp_program ntpd

[ptp_domain 24]
interfaces eth3

[ntp.conf]
restrict default limited kod nomodify notrap nopeer
restrict -6 default limited kod nomodify notrap nopeer

[ptp4l]
path /usr/src/linuxptp/ptp4l
options -2

[ptp4l.conf]
logging_level 3

[phc2sys]
path /usr/src/linuxptp/phc2sys
options -l 3

[ntpd]
options -g -u ntp:ntp
Important parts are the options -2 line in the [ptp4l] section and the [ptp_domain 24] part to match the domain number on the module. Software timestamping probably requires another option or two, docs are here: timemaster(8): run NTP with PTP as reference clocks
 
  • Like
Reactions: piranha32