| /**************************************************************************** |
| * apps/include/netutils/ptpd.h |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. The |
| * ASF licenses this file to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| * |
| ****************************************************************************/ |
| |
| #ifndef __APPS_INCLUDE_NETUTILS_PTPD_H |
| #define __APPS_INCLUDE_NETUTILS_PTPD_H |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Pre-processor Definitions |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Public Types |
| ****************************************************************************/ |
| |
| /* PTPD status information structure */ |
| |
| struct ptpd_status_s |
| { |
| /* Is there a valid remote clock source active? */ |
| |
| bool clock_source_valid; |
| |
| /* Information about selected best clock source */ |
| |
| struct |
| { |
| uint8_t id[8]; /* Clock identity */ |
| int utcoffset; /* Offset between clock time and UTC time (seconds) */ |
| int priority1; /* Main priority field */ |
| int clockclass; /* Clock class (IEEE-1588, lower is better) */ |
| int accuracy; /* Clock accuracy (IEEE-1588, lower is better) */ |
| int variance; /* Clock variance (IEEE-1588, lower is better) */ |
| int priority2; /* Secondary priority field */ |
| uint8_t gm_id[8]; /* Grandmaster clock identity */ |
| int stepsremoved; /* How many steps from grandmaster clock */ |
| int timesource; /* Type of time source (IEEE-1588) */ |
| } clock_source_info; |
| |
| /* When was clock last updated or adjusted (CLOCK_REALTIME). |
| * Matches last_received_sync but in different clock. |
| */ |
| |
| struct timespec last_clock_update; |
| |
| /* Details of clock adjustment made at last_clock_update */ |
| |
| int64_t last_delta_ns; /* Latest measured clock error */ |
| int64_t last_adjtime_ns; /* Previously applied adjtime() offset */ |
| |
| /* Averaged clock drift estimate (parts per billion). |
| * Positive means remote clock runs faster than local clock before |
| * adjustment. |
| */ |
| |
| long drift_ppb; |
| |
| /* Averaged path delay */ |
| |
| long path_delay_ns; |
| |
| /* Timestamps of latest received packets (CLOCK_MONOTONIC) */ |
| |
| struct timespec last_received_multicast; /* Any multicast packet */ |
| struct timespec last_received_announce; /* Announce from any server */ |
| struct timespec last_received_sync; /* Sync from selected source */ |
| |
| /* Timestamps of latest transmitted packets (CLOCK_MONOTONIC) */ |
| |
| struct timespec last_transmitted_sync; |
| struct timespec last_transmitted_announce; |
| struct timespec last_transmitted_delayresp; |
| struct timespec last_transmitted_delayreq; |
| }; |
| |
| /**************************************************************************** |
| * Public Data |
| ****************************************************************************/ |
| |
| #ifdef __cplusplus |
| #define EXTERN extern "C" |
| extern "C" |
| { |
| #else |
| #define EXTERN extern |
| #endif |
| |
| /**************************************************************************** |
| * Public Function Prototypes |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Name: ptpd_start |
| * |
| * Description: |
| * Start the PTP daemon and bind it to specified interface. |
| * |
| * Input Parameters: |
| * interface - Name of the network interface to bind to, e.g. "eth0" |
| * |
| * Returned Value: |
| * On success, the non-negative task ID of the PTP daemon is returned; |
| * On failure, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int ptpd_start(FAR const char *interface); |
| |
| /**************************************************************************** |
| * Name: ptpd_status |
| * |
| * Description: |
| * Query status from a running PTP daemon. |
| * |
| * Input Parameters: |
| * pid - Process ID previously returned by ptpd_start() |
| * status - Pointer to storage for status information. |
| * |
| * Returned Value: |
| * On success, returns OK. |
| * On failure, a negated errno value is returned. |
| * |
| * Assumptions/Limitations: |
| * Multiple threads with priority less than CONFIG_NETUTILS_PTPD_SERVERPRIO |
| * can request status simultaneously. If higher priority threads request |
| * status simultaneously, some of the requests may timeout. |
| * |
| ****************************************************************************/ |
| |
| int ptpd_status(int pid, FAR struct ptpd_status_s *status); |
| |
| /**************************************************************************** |
| * Name: ptpd_stop |
| * |
| * Description: |
| * Stop PTP daemon |
| * |
| * Input Parameters: |
| * pid - Process ID previously returned by ptpd_start() |
| * |
| * Returned Value: |
| * On success, returns OK. |
| * On failure, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int ptpd_stop(int pid); |
| |
| #undef EXTERN |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __APPS_INCLUDE_NETUTILS_PTPD_H */ |