aboutsummaryrefslogtreecommitdiff
path: root/sbin/ifconfig
diff options
context:
space:
mode:
authorRyan Moeller <freqlabs@FreeBSD.org>2021-02-28 10:30:09 +0000
committerRyan Moeller <freqlabs@FreeBSD.org>2021-03-03 02:15:40 +0000
commit8b22242550c98d0a59b6589f2be0beb1dc2eac13 (patch)
tree6998207bc32681118cd102780cc0fecca4bc2ad9 /sbin/ifconfig
parent21802a127d83e8a8c721d69b697e7ddb223d7797 (diff)
downloadsrc-8b22242550c98d0a59b6589f2be0beb1dc2eac13.tar.gz
src-8b22242550c98d0a59b6589f2be0beb1dc2eac13.zip
sbin/ifconfig: Use a global libifconfig handle
This should eventually replace the socket passed to the various handlers. In the meantime, making it global avoids repeatedly opening and closing handles. Reported by: kp Reviewed by: kp (earlier version) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28990
Diffstat (limited to 'sbin/ifconfig')
-rw-r--r--sbin/ifconfig/carp.c9
-rw-r--r--sbin/ifconfig/ifbridge.c9
-rw-r--r--sbin/ifconfig/ifclone.c6
-rw-r--r--sbin/ifconfig/ifconfig.c9
-rw-r--r--sbin/ifconfig/ifconfig.h5
-rw-r--r--sbin/ifconfig/ifgroup.c9
-rw-r--r--sbin/ifconfig/iflagg.c9
-rw-r--r--sbin/ifconfig/sfp.c14
8 files changed, 21 insertions, 49 deletions
diff --git a/sbin/ifconfig/carp.c b/sbin/ifconfig/carp.c
index d6f8d78ba920..23a119e3b9d7 100644
--- a/sbin/ifconfig/carp.c
+++ b/sbin/ifconfig/carp.c
@@ -73,14 +73,9 @@ static void
carp_status(int s)
{
struct carpreq carpr[CARP_MAXVHID];
- ifconfig_handle_t *lifh;
-
- lifh = ifconfig_open();
- if (lifh == NULL)
- return;
if (ifconfig_carp_get_info(lifh, name, carpr, CARP_MAXVHID) == -1)
- goto close;
+ return;
for (size_t i = 0; i < carpr[0].carpr_count; i++) {
printf("\tcarp: %s vhid %d advbase %d advskew %d",
@@ -91,8 +86,6 @@ carp_status(int s)
else
printf("\n");
}
-close:
- ifconfig_close(lifh);
}
static void
diff --git a/sbin/ifconfig/ifbridge.c b/sbin/ifconfig/ifbridge.c
index cc1520a2e3f0..2bd9c96f2489 100644
--- a/sbin/ifconfig/ifbridge.c
+++ b/sbin/ifconfig/ifbridge.c
@@ -156,19 +156,14 @@ bridge_addresses(int s, const char *prefix)
static void
bridge_status(int s)
{
- ifconfig_handle_t *lifh;
struct ifconfig_bridge_status *bridge;
struct ifbropreq *params;
const char *pad, *prefix;
uint8_t lladdr[ETHER_ADDR_LEN];
uint16_t bprio;
- lifh = ifconfig_open();
- if (lifh == NULL)
- return;
-
if (ifconfig_bridge_get_bridge_status(lifh, name, &bridge) == -1)
- goto close;
+ return;
params = bridge->params;
@@ -227,8 +222,6 @@ bridge_status(int s)
}
ifconfig_bridge_free_bridge_status(bridge);
-close:
- ifconfig_close(lifh);
}
static void
diff --git a/sbin/ifconfig/ifclone.c b/sbin/ifconfig/ifclone.c
index ad39bd43757a..9cacff239967 100644
--- a/sbin/ifconfig/ifclone.c
+++ b/sbin/ifconfig/ifclone.c
@@ -57,17 +57,11 @@ typedef enum {
static void
list_cloners(void)
{
- ifconfig_handle_t *lifh;
char *cloners;
size_t cloners_count;
- lifh = ifconfig_open();
- if (lifh == NULL)
- return;
-
if (ifconfig_list_cloners(lifh, &cloners, &cloners_count) < 0)
errc(1, ifconfig_err_errno(lifh), "unable to list cloners");
- ifconfig_close(lifh);
for (const char *name = cloners;
name < cloners + cloners_count * IFNAMSIZ;
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index 5b12baa0656e..fc5351bd420e 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -78,8 +78,12 @@ static const char rcsid[] =
#include <string.h>
#include <unistd.h>
+#include <libifconfig.h>
+
#include "ifconfig.h"
+ifconfig_handle_t *lifh;
+
/*
* Since "struct ifreq" is composed of various union members, callers
* should pay special attention to interpret the value.
@@ -427,6 +431,10 @@ main(int argc, char *argv[])
f_inet = f_inet6 = f_ether = f_addr = NULL;
matchgroup = nogroup = NULL;
+ lifh = ifconfig_open();
+ if (lifh == NULL)
+ err(EXIT_FAILURE, "ifconfig_open");
+
envformat = getenv("IFCONFIG_FORMAT");
if (envformat != NULL)
setformat(envformat);
@@ -699,6 +707,7 @@ main(int argc, char *argv[])
done:
freeformat();
+ ifconfig_close(lifh);
exit(exit_code);
}
diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h
index 67c25f5921d6..61b1137b47ba 100644
--- a/sbin/ifconfig/ifconfig.h
+++ b/sbin/ifconfig/ifconfig.h
@@ -36,6 +36,10 @@
* $FreeBSD$
*/
+#pragma once
+
+#include <libifconfig.h>
+
#define __constructor __attribute__((constructor))
struct afswtch;
@@ -128,6 +132,7 @@ struct option {
};
void opt_register(struct option *);
+extern ifconfig_handle_t *lifh;
extern struct ifreq ifr;
extern char name[IFNAMSIZ]; /* name of interface */
extern int allmedia;
diff --git a/sbin/ifconfig/ifgroup.c b/sbin/ifconfig/ifgroup.c
index 2b13227af4f3..7f1173c316d7 100644
--- a/sbin/ifconfig/ifgroup.c
+++ b/sbin/ifconfig/ifgroup.c
@@ -86,16 +86,11 @@ unsetifgroup(const char *group_name, int d, int s, const struct afswtch *rafp)
static void
getifgroups(int s)
{
- ifconfig_handle_t *lifh;
struct ifgroupreq ifgr;
size_t cnt;
- lifh = ifconfig_open();
- if (lifh == NULL)
- return;
-
if (ifconfig_get_groups(lifh, name, &ifgr) == -1)
- goto close;
+ return;
cnt = 0;
for (size_t i = 0; i < ifgr.ifgr_len / sizeof(struct ifg_req); ++i) {
@@ -112,8 +107,6 @@ getifgroups(int s)
printf("\n");
free(ifgr.ifgr_groups);
-close:
- ifconfig_close(lifh);
}
static void
diff --git a/sbin/ifconfig/iflagg.c b/sbin/ifconfig/iflagg.c
index 5e726115662a..48d7450076a9 100644
--- a/sbin/ifconfig/iflagg.c
+++ b/sbin/ifconfig/iflagg.c
@@ -219,7 +219,6 @@ static void
lagg_status(int s)
{
struct lagg_protos protos[] = LAGG_PROTOS;
- ifconfig_handle_t *lifh;
struct ifconfig_lagg_status *lagg;
struct lagg_reqall *ra;
struct lagg_reqflags *rf;
@@ -228,12 +227,8 @@ lagg_status(int s)
struct lacp_opreq *lp;
const char *proto;
- lifh = ifconfig_open();
- if (lifh == NULL)
- return;
-
if (ifconfig_lagg_get_lagg_status(lifh, name, &lagg) == -1)
- goto close;
+ return;
ra = lagg->ra;
rf = lagg->rf;
@@ -297,8 +292,6 @@ lagg_status(int s)
}
ifconfig_lagg_free_lagg_status(lagg);
-close:
- ifconfig_close(lifh);
}
static
diff --git a/sbin/ifconfig/sfp.c b/sbin/ifconfig/sfp.c
index 15ff22639060..4900b18ff2c8 100644
--- a/sbin/ifconfig/sfp.c
+++ b/sbin/ifconfig/sfp.c
@@ -61,15 +61,10 @@ sfp_status(int s, struct ifreq *ifr, int verbose)
struct ifconfig_sfp_info_strings strings;
struct ifconfig_sfp_vendor_info vendor_info;
struct ifconfig_sfp_status status;
- ifconfig_handle_t *lifh;
size_t channel_count;
- lifh = ifconfig_open();
- if (lifh == NULL)
- return;
-
if (ifconfig_sfp_get_sfp_info(lifh, name, &info) == -1)
- goto close;
+ return;
ifconfig_sfp_get_sfp_info_strings(&info, &strings);
@@ -79,7 +74,7 @@ sfp_status(int s, struct ifreq *ifr, int verbose)
strings.sfp_conn);
if (ifconfig_sfp_get_sfp_vendor_info(lifh, name, &vendor_info) == -1)
- goto close;
+ return;
printf("\tvendor: %s PN: %s SN: %s DATE: %s\n",
vendor_info.name, vendor_info.pn, vendor_info.sn, vendor_info.date);
@@ -118,7 +113,7 @@ sfp_status(int s, struct ifreq *ifr, int verbose)
struct ifconfig_sfp_dump dump;
if (ifconfig_sfp_get_sfp_dump(lifh, name, &dump) == -1)
- goto close;
+ return;
if (ifconfig_sfp_id_is_qsfp(info.sfp_id)) {
printf("\n\tSFF8436 DUMP (0xA0 128..255 range):\n");
@@ -133,7 +128,4 @@ sfp_status(int s, struct ifreq *ifr, int verbose)
"\t", HD_OMIT_COUNT | HD_OMIT_CHARS);
}
}
-
-close:
- ifconfig_close(lifh);
}