1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/**
* @file interface.h
* @brief Implements network interface data structures.
* @note Copyright (C) 2020 Richard Cochran <richardcochran@gmail.com>
* @note SPDX-License-Identifier: GPL-2.0+
*/
#ifndef HAVE_INTERFACE_H
#define HAVE_INTERFACE_H
#include <stdbool.h>
#include <sys/queue.h>
#include "sk.h"
#define MAX_IFNAME_SIZE 108 /* = UNIX_PATH_MAX */
#if (IF_NAMESIZE > MAX_IFNAME_SIZE)
#error if_namesize larger than expected.
#endif
/** Opaque type */
struct interface;
/**
* Creates an instance of an interface.
* @param name The device which indentifies this interface.
* @param remote For UDS interfaces, the address of the remote server, possibly NULL.
* @return A pointer to an interface instance on success, NULL otherwise.
*/
struct interface *interface_create(const char *name, const char *remote);
/**
* Destroys an instance of an interface.
* @param iface A pointer obtained via interface_create().
*/
void interface_destroy(struct interface *iface);
/**
* Populate the time stamping information of a given interface.
* @param iface The interface of interest.
* @return zero on success, negative on failure.
*/
int interface_get_tsinfo(struct interface *iface);
/**
* Populate the time stamping information of a given interface.
* @param iface The interface of interest.
* @return zero on success, negative on failure.
*/
int interface_get_ifinfo(struct interface *iface);
/**
* Obtain the time stamping label of a network interface. This can be
* different from the name of the interface when bonding is in effect.
*
* @param iface The interface of interest.
* @return The time stamping device name of the network interface.
*/
const char *interface_label(struct interface *iface);
/**
* Obtains the name of a network interface.
* @param iface The interface of interest.
* @return The device name of the network interface.
*/
const char *interface_name(struct interface *iface);
/**
* Obtains the index of a PTP Hardware Clock device from a network interface.
* @param iface The interface of interest.
* @return The PHC index of the interface.
*/
int interface_phc_index(struct interface *iface);
/**
* Obtains the remote address from a UDS interface.
* @param iface The interface of interest.
* @return The device name of the network interface.
*/
const char *interface_remote(struct interface *iface);
/**
* Set the time stamping label of a given interface.
* @param iface The interface of interest.
* @param name The desired label for the interface.
*/
void interface_set_label(struct interface *iface, const char *label);
/**
* Tests whether an interface's time stamping information is valid or not.
* @param iface The interface of interest.
* @return True if the time stamping information is valid, false otherwise.
*/
bool interface_tsinfo_valid(struct interface *iface);
/**
* Tests whether an interface's interface information is valid or not.
* @param iface The interface of interest.
* @return True if the interface information is valid, false otherwise.
*/
bool interface_ifinfo_valid(struct interface *iface);
/**
* Tests whether an interface supports a set of given time stamping modes.
* @param iface The interface of interest.
* @param modes Bit mask of SOF_TIMESTAMPING_ flags.
* @return True if the time stamping modes are supported, false otherwise.
*/
bool interface_tsmodes_supported(struct interface *iface, int modes);
/**
* Set the vclock (virtual PHC) to be used for timestamping on an interface.
* @param iface The interface of interest.
* @param vclock The index of the vclock.
*/
void interface_set_vclock(struct interface *iface, int vclock);
/**
* Get the vclock index set for the interface.
* @param iface The interface of interest.
* @return The index of the vclock, or -1 if not set.
*/
int interface_get_vclock(struct interface *iface);
/**
* Obtains the interface bit period based on the speed.
* @param iface The interface of interest.
* @return return interface bitperiod in atto seconds.
*/
uint64_t interface_bitperiod(struct interface *iface);
#endif
|