]> git.ipfire.org Git - thirdparty/nqptp.git/commitdiff
Clock ID now stored following an announce rather than a follow_up. Require a clock...
authorMike Brady <4265913+mikebrady@users.noreply.github.com>
Sat, 5 Jun 2021 06:54:29 +0000 (07:54 +0100)
committerMike Brady <4265913+mikebrady@users.noreply.github.com>
Sat, 5 Jun 2021 06:54:29 +0000 (07:54 +0100)
nqptp-clock-sources.c
nqptp-message-handlers.c

index a12119abdab20fa57e4ed48c9fb1e8fd300a16a6..fbe55732b2c32247e10ec7c4fab53d60f0afed0a 100644 (file)
@@ -163,7 +163,7 @@ void update_master() {
 
   int best_so_far = -1;
   int timing_peer_count = 0;
-  uint32_t acceptance_mask = (1 << clock_is_qualified) | (1 << clock_is_a_timing_peer);
+  uint32_t acceptance_mask = (1 << clock_is_qualified) | (1 << clock_is_a_timing_peer) | (1 << clock_is_valid);
   for (i = 0; i < MAX_CLOCKS; i++) {
     if ((clocks_private[i].flags & acceptance_mask) == acceptance_mask) {
       // found a possible clock candidate
index 2f0627374dae19f539217258769c9b147ddd9abd..7417839a9dedc0c1bb15c3b40ed913194b85acae 100644 (file)
@@ -83,6 +83,12 @@ void handle_announce(char *buf, ssize_t recv_len, clock_source_private_data *clo
     if ((size_t)recv_len >= sizeof(struct ptp_announce_message)) {
       struct ptp_announce_message *msg = (struct ptp_announce_message *)buf;
 
+      uint64_t packet_clock_id = nctohl(&msg->header.clockIdentity[0]);
+      uint64_t packet_clock_id_low = nctohl(&msg->header.clockIdentity[4]);
+      packet_clock_id = packet_clock_id << 32;
+      packet_clock_id = packet_clock_id + packet_clock_id_low;
+      clock_private_info->clock_id = packet_clock_id;
+
       int i;
       // number of elements in the array is 4, hence the 4-1 stuff
       for (i = 4 - 1; i > 1 - 1; i--) {
@@ -212,15 +218,18 @@ void handle_announce(char *buf, ssize_t recv_len, clock_source_private_data *clo
 
 void handle_follow_up(char *buf, __attribute__((unused)) ssize_t recv_len,
                       clock_source_private_data *clock_private_info, uint64_t reception_time) {
+  clock_private_info->flags |= (1 << clock_is_valid);
   if ((clock_private_info->flags & (1 << clock_is_master)) != 0) {
     debug(2, "FOLLOWUP from %" PRIx64 ", %s.", clock_private_info->clock_id,
           &clock_private_info->ip);
     struct ptp_follow_up_message *msg = (struct ptp_follow_up_message *)buf;
 
+/*
     uint64_t packet_clock_id = nctohl(&msg->header.clockIdentity[0]);
     uint64_t packet_clock_id_low = nctohl(&msg->header.clockIdentity[4]);
     packet_clock_id = packet_clock_id << 32;
     packet_clock_id = packet_clock_id + packet_clock_id_low;
+*/
 
     uint16_t seconds_hi = nctohs(&msg->follow_up.preciseOriginTimestamp[0]);
     uint32_t seconds_low = nctohl(&msg->follow_up.preciseOriginTimestamp[2]);
@@ -290,11 +299,11 @@ void handle_follow_up(char *buf, __attribute__((unused)) ssize_t recv_len,
 
     uint32_t old_flags = clock_private_info->flags;
 
-    if ((clock_private_info->flags & (1 << clock_is_valid)) == 0) {
-      debug(1, "clock %" PRIx64 " is now valid at: %s", packet_clock_id, clock_private_info->ip);
-    }
-    clock_private_info->clock_id = packet_clock_id;
-    clock_private_info->flags |= (1 << clock_is_valid);
+    //if ((clock_private_info->flags & (1 << clock_is_valid)) == 0) {
+    //  debug(1, "clock %" PRIx64 " is now valid at: %s", packet_clock_id, clock_private_info->ip);
+    //}
+
+    // clock_private_info->clock_id = packet_clock_id;
     clock_private_info->local_time = reception_time;
     clock_private_info->origin_time = preciseOriginTimestamp;
     clock_private_info->local_to_source_time_offset = offset;