[Bug 2150] New: NTP Broadcast problems

bugzilla-daemon at rtems.org bugzilla-daemon at rtems.org
Fri Nov 1 19:23:36 UTC 2013


https://www.rtems.org/bugzilla/show_bug.cgi?id=2150

             Bug #: 2150
           Summary: NTP Broadcast problems
    Classification: Unclassified
           Product: RTEMS
           Version: 4.10
          Platform: All
               URL: http://www.rtems.org/pipermail/rtems-devel/2013-Octobe
                    r/004814.html
        OS/Version: RTEMS
            Status: NEW
          Severity: normal
          Priority: P3
         Component: cpukit
        AssignedTo: joel.sherrill at oarcorp.com
        ReportedBy: panetta at slac.stanford.edu


This issue was originally reported on rtems-devel at the linked URL.

I've been having trouble with Network Time Protocol broadcasts under RTEMS
4.10.2 and 4.11 (HEAD).  Non-broadcast works perfectly fine.

For non-broadcast, my RTEMS host is configured with the address of the NTP
server, and my NTP server is configured with:

restrict 172.21.7.192 mask 255.255.255.192 nomodify notrap nopeer

With this, I see the request/reply packets after the call to
rtems_bsdnet_synchronize_ntp(0,0) and the time is synced correctly.


For an NTP server setup as broadcast, the situation is different.  With the
server configuration line:

broadcast 172.21.7.255 minpoll 4

replacing the 'restrict' statement above and no server configured on the RTEMS
host, I don't get sync.  I do see the UDP packets on the RTEMS host every 16
seconds, but the time is not adjusted on receipt.

Tracing this down found a couple of things that needed changing:

1) the value of rtems_bsdnet_ntpserver_count is equal to 0 when no
    server is set, so the check for (rtems_bsdnet_ntpserver_count < 0)
    in rtems_bsdnet_get_ntp() is wrong.  The check should be "<= 0".

2) Binding the listening socket port to 0 does not work.  Packets
    appear on the interface, but the recvfrom in tryServer() never
    returns.  Changing this to the well known NTP socket 123 allows the
    packets to be seen. (See NOTE below)

3) In tryServer(), an explicit check for NTP version 3 packets is made.
    If the NTP server is version 4, this check fails even though the
    packets seem to be the right shape.

NOTE: Change 2 conflicts with the changes made to rtems_bsd_net.c by Eric
Norum and Joel Sherril between 2008-09-23 and 2008-09-26.  I could not find
any mailing list traffic on this, other than one message from Daron Chabot on
2008-11-12 in reference to RTEMS 4.9.1:
http://www.rtems.org/pipermail/rtems-users/2008-November/004455.html.

With these changes both broadcast and non-broadcast seem to set the time
correctly.  The only caveat is that for the broadcast mode,
rtems_bsdnet_get_ntp() blocks until it gets a packet (or until timeout after
5*80 seconds).

Gedare generated a patch from my original message:
http://www.rtems.org/pipermail/rtems-devel/2013-November/004877.html

-- 
Configure bugmail: https://www.rtems.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the bugs mailing list