summaryrefslogtreecommitdiffstats
path: root/sys/net/if_mpe.c
diff options
context:
space:
mode:
authordlg <dlg@openbsd.org>2019-03-18 03:21:20 +0000
committerdlg <dlg@openbsd.org>2019-03-18 03:21:20 +0000
commitfc9d54dbcc9a8d616e055538f7151bfbc83af27b (patch)
treeaedebca5d994829c62c5276e8d7892eba4a08616 /sys/net/if_mpe.c
parentmake SIOCGETLABEL fail with EADDRNOTAVAIL if the label is not set. (diff)
downloadwireguard-openbsd-fc9d54dbcc9a8d616e055538f7151bfbc83af27b.tar.xz
wireguard-openbsd-fc9d54dbcc9a8d616e055538f7151bfbc83af27b.zip
tweak SIOCGETLABEL and add SIOCDELLABEL
makes mpe consistent with mpw and mpip
Diffstat (limited to 'sys/net/if_mpe.c')
-rw-r--r--sys/net/if_mpe.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/net/if_mpe.c b/sys/net/if_mpe.c
index b980ba44e71..e50d5a45930 100644
--- a/sys/net/if_mpe.c
+++ b/sys/net/if_mpe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_mpe.c,v 1.86 2019/02/26 03:23:04 dlg Exp $ */
+/* $OpenBSD: if_mpe.c,v 1.87 2019/03/18 03:21:20 dlg Exp $ */
/*
* Copyright (c) 2008 Pierre-Yves Ritschard <pyr@spootnik.org>
@@ -341,6 +341,10 @@ mpe_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
case SIOCGETLABEL:
shim.shim_label = MPLS_SHIM2LABEL(sc->sc_smpls.smpls_label);
+ if (shim.shim_label == 0) {
+ error = EADDRNOTAVAIL;
+ break;
+ }
error = copyout(&shim, ifr->ifr_data, sizeof(shim));
break;
case SIOCSETLABEL:
@@ -358,6 +362,15 @@ mpe_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
sc->sc_rdomain);
}
break;
+ case SIOCDELLABEL:
+ if (sc->sc_smpls.smpls_label != MPLS_LABEL2SHIM(0)) {
+ rt_ifa_del(&sc->sc_ifa, RTF_MPLS|RTF_LOCAL,
+ smplstosa(&sc->sc_smpls), sc->sc_rdomain);
+
+ }
+ shim.shim_label = MPLS_LABEL2SHIM(0);
+ break;
+
case SIOCSLIFPHYRTABLE:
if (ifr->ifr_rdomainid < 0 ||
ifr->ifr_rdomainid > RT_TABLEID_MAX ||