From a8f742528efe011790841e70f833f72619e4a352 Mon Sep 17 00:00:00 2001 From: Richard Cochran Date: Mon, 10 Feb 2020 21:05:42 -0800 Subject: [PATCH] interface: Hide the implementation details. Now that a complete functional API is in place, there is no need to expose the inner workings of the network interface data type. This patch converts it into an opaque type while leaving the list marker visible to users through a simple form of "friendly exposition". Signed-off-by: Richard Cochran --- clock.c | 4 ++++ config.c | 4 ++++ interface.c | 7 +++++++ interface.h | 9 ++------- nsm.c | 4 ++++ 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/clock.c b/clock.c index e5f104ef..1668383f 100644 --- a/clock.c +++ b/clock.c @@ -47,6 +47,10 @@ #define N_CLOCK_PFD (N_POLLFD + 1) /* one extra per port, for the fault timer */ #define POW2_41 ((double)(1ULL << 41)) +struct interface { + STAILQ_ENTRY(interface) list; +}; + struct port { LIST_ENTRY(port) list; }; diff --git a/config.c b/config.c index e0338420..f20c5f7e 100644 --- a/config.c +++ b/config.c @@ -32,6 +32,10 @@ #include "print.h" #include "util.h" +struct interface { + STAILQ_ENTRY(interface) list; +}; + enum config_section { GLOBAL_SECTION, UC_MTAB_SECTION, diff --git a/interface.c b/interface.c index 63ed7e4a..7cd5b41f 100644 --- a/interface.c +++ b/interface.c @@ -7,6 +7,13 @@ #include #include "interface.h" +struct interface { + STAILQ_ENTRY(interface) list; + char name[MAX_IFNAME_SIZE + 1]; + char ts_label[MAX_IFNAME_SIZE + 1]; + struct sk_ts_info ts_info; +}; + struct interface *interface_create(const char *name) { struct interface *iface; diff --git a/interface.h b/interface.h index b61f4d6f..6cc50ac4 100644 --- a/interface.h +++ b/interface.h @@ -17,13 +17,8 @@ #error if_namesize larger than expected. #endif -/** Defines a network interface, with PTP options. */ -struct interface { - STAILQ_ENTRY(interface) list; - char name[MAX_IFNAME_SIZE + 1]; - char ts_label[MAX_IFNAME_SIZE + 1]; - struct sk_ts_info ts_info; -}; +/** Opaque type */ +struct interface; /** * Creates an instance of an interface. diff --git a/nsm.c b/nsm.c index 1292c6bb..5aa925bf 100644 --- a/nsm.c +++ b/nsm.c @@ -35,6 +35,10 @@ #define IFMT "\n\t\t" #define NSM_NFD 3 +struct interface { + STAILQ_ENTRY(interface) list; +}; + struct nsm { struct config *cfg; struct fdarray fda;