/* * Copyright (c) 2024 BayLibre SAS * * SPDX-License-Identifier: Apache-2.0 */ /** * @file transport.h * @brief Function implementing abstraction over networking protocols. */ #ifndef ZEPHYR_INCLUDE_PTP_TRANSPORT_H_ #define ZEPHYR_INCLUDE_PTP_TRANSPORT_H_ #include #include "port.h" #ifdef __cplusplus extern "C" { #endif #define PTP_SOCKET_PORT_EVENT (319) #define PTP_SOCKET_PORT_GENERAL (320) /** * @brief Values used to identify PTP Port socket based on used port. */ enum ptp_socket { PTP_SOCKET_EVENT, PTP_SOCKET_GENERAL, PTP_SOCKET_CNT }; /** * @brief Types of PTP networking protocols. */ enum ptp_net_protocol { PTP_NET_PROTOCOL_UDP_IPv4 = 1, PTP_NET_PROTOCOL_UDP_IPv6, PTP_NET_PROTOCOL_IEEE_802_3, }; /** * @brief Function handling opening specified transport network connection. * * @param[in] port Pointer to the PTP Port structure. * * @return 0 on success, negative otherwise. */ int ptp_transport_open(struct ptp_port *port); /** * @brief Function for closing specified transport network connection. * * @param[in] port Pointer to the PTP Port structure. * * @return 0 on success, negative otherwise. */ int ptp_transport_close(struct ptp_port *port); /** * @brief Function for sending PTP message using a specified transport. The message is sent * to the default multicast address. * * @note Address specified in the message is ignored. * * @param[in] port Pointer to the PTP Port structure. * @param[in] msg Pointer to the message to be send. * @param[in] idx Index of the socket to be used to send message. * * @return Number of sent bytes. */ int ptp_transport_send(struct ptp_port *port, struct ptp_msg *msg, enum ptp_socket idx); /** * @brief Function for sending PTP message using a specified transport. The message is sent * to the address provided with @ref ptp_msg message structure. * * @param[in] port Pointer to the PTP Port structure. * @param[in] msg Pointer to the message to be send. * @param[in] idx Index of the socket to be used to send message. * * @return Number of sent bytes. */ int ptp_transport_sendto(struct ptp_port *port, struct ptp_msg *msg, enum ptp_socket idx); /** * @brief Function for receiving a PTP message using a specified transport. * * @param[in] port Pointer to the PTP Port structure. * @param[in] idx Index of the socket to be used to send message. * * @return */ int ptp_transport_recv(struct ptp_port *port, struct ptp_msg *msg, enum ptp_socket idx); /** * @brief Function for getting transport's protocol address. * * @param[in] port Pointer to the PTP Port structure. * @param[in] addr Pointer to the buffer to store PTP Port's IP address. * * @return 0 if can't get IP address, otherwise length of the address. */ int ptp_transport_protocol_addr(struct ptp_port *port, uint8_t *addr); /** * @brief Function for getting transport's physical address. * * @param[in] port Pointer to the PTP Port structure. * * @return Pointer to the structure holding hardware link layer address. */ struct net_linkaddr *ptp_transport_physical_addr(struct ptp_port *port); #ifdef __cplusplus } #endif /** * @} */ #endif /* ZEPHYR_INCLUDE_PTP_TRANSPORT_H_ */