Module Name: src
Committed By: ozaki-r
Date: Thu Jul 4 02:44:25 UTC 2019
Modified Files:
src/sys/net: if.c if.h
src/sys/sys: sockio.h
Log Message:
Add support for a network interface description.
ioctl(2):
- Add SIOCGIFDESCR/SIOCSIFDESCR commands to get/set the description.
This enables to make a memo for interface, like "Home network" or "Remote VPN".
>From t-kusaba@IIJ
To generate a diff of this commit:
cvs rdiff -u -r1.455 -r1.456 src/sys/net/if.c
cvs rdiff -u -r1.273 -r1.274 src/sys/net/if.h
cvs rdiff -u -r1.37 -r1.38 src/sys/sys/sockio.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/net/if.c
diff -u src/sys/net/if.c:1.455 src/sys/net/if.c:1.456
--- src/sys/net/if.c:1.455 Tue May 21 09:18:37 2019
+++ src/sys/net/if.c Thu Jul 4 02:44:25 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if.c,v 1.455 2019/05/21 09:18:37 msaitoh Exp $ */
+/* $NetBSD: if.c,v 1.456 2019/07/04 02:44:25 ozaki-r Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -90,7 +90,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.455 2019/05/21 09:18:37 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.456 2019/07/04 02:44:25 ozaki-r Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -3050,6 +3050,58 @@ ifioctl_common(struct ifnet *ifp, u_long
KERNEL_UNLOCK_UNLESS_NET_MPSAFE();
#endif
return ENETRESET;
+ case SIOCSIFDESCR:
+ {
+ char *descrbuf;
+
+ ifr = data;
+
+ if (ifr->ifr_buflen > IFDESCRSIZE)
+ return ENAMETOOLONG;
+
+ if (ifr->ifr_buf == NULL || ifr->ifr_buflen == 0) {
+ /* unset description */
+ descrbuf = NULL;
+ } else {
+ int error;
+
+ descrbuf = kmem_zalloc(IFDESCRSIZE, KM_SLEEP);
+ /* copy (IFDESCRSIZE - 1) bytes to ensure terminating nul */
+ error = copyin(ifr->ifr_buf, descrbuf, IFDESCRSIZE - 1);
+ if (error) {
+ kmem_free(descrbuf, IFDESCRSIZE);
+ return error;
+ }
+ }
+
+ if (ifp->if_description != NULL)
+ kmem_free(ifp->if_description, IFDESCRSIZE);
+
+ ifp->if_description = descrbuf;
+ }
+ break;
+
+ case SIOCGIFDESCR:
+ {
+ char *descr;
+
+ ifr = data;
+ descr = ifp->if_description;
+
+ if (descr == NULL)
+ return ENOMSG;
+
+ if (ifr->ifr_buflen < IFDESCRSIZE)
+ return EINVAL;
+ else {
+ int error;
+ error = copyout(descr, ifr->ifr_buf, IFDESCRSIZE);
+ if (error)
+ return error;
+ }
+ }
+ break;
+
default:
return ENOTTY;
}
Index: src/sys/net/if.h
diff -u src/sys/net/if.h:1.273 src/sys/net/if.h:1.274
--- src/sys/net/if.h:1.273 Mon Jun 24 06:24:33 2019
+++ src/sys/net/if.h Thu Jul 4 02:44:25 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if.h,v 1.273 2019/06/24 06:24:33 skrll Exp $ */
+/* $NetBSD: if.h,v 1.274 2019/07/04 02:44:25 ozaki-r Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -75,6 +75,11 @@
*/
#define IF_NAMESIZE 16
+/*
+ * Length of interface description, including terminating '\0'.
+ */
+#define IFDESCRSIZE 64
+
#if defined(_NETBSD_SOURCE)
#include <sys/socket.h>
@@ -365,6 +370,7 @@ typedef struct ifnet {
int (*if_setflags) /* :: */
(struct ifnet *, const short);
kmutex_t *if_ioctl_lock; /* :: */
+ char *if_description; /* i: interface description */
#ifdef _KERNEL /* XXX kvm(3) */
struct callout *if_slowtimo_ch;/* :: */
struct krwlock *if_afdata_lock;/* :: */
Index: src/sys/sys/sockio.h
diff -u src/sys/sys/sockio.h:1.37 src/sys/sys/sockio.h:1.38
--- src/sys/sys/sockio.h:1.37 Fri May 17 07:37:12 2019
+++ src/sys/sys/sockio.h Thu Jul 4 02:44:25 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sockio.h,v 1.37 2019/05/17 07:37:12 msaitoh Exp $ */
+/* $NetBSD: sockio.h,v 1.38 2019/07/04 02:44:25 ozaki-r Exp $ */
/*-
* Copyright (c) 1982, 1986, 1990, 1993, 1994
@@ -143,6 +143,9 @@
#define SIOCGIFINDEX _IOWR('i', 140, struct ifreq) /* get ifnet index */
#define SIOCSETHERCAP _IOW('i', 141, struct eccapreq) /* set ethercap */
+#define SIOCSIFDESCR _IOW('i', 142, struct ifreq) /* set interface description */
+#define SIOCGIFDESCR _IOWR('i', 143, struct ifreq) /* get interface description */
+
#define SIOCGUMBINFO _IOWR('i', 190, struct ifreq) /* get MBIM info */
#define SIOCSUMBPARAM _IOW('i', 191, struct ifreq) /* set MBIM param */
#define SIOCGUMBPARAM _IOWR('i', 192, struct ifreq) /* get MBIM param */