diff options
author | 2019-03-18 03:21:20 +0000 | |
---|---|---|
committer | 2019-03-18 03:21:20 +0000 | |
commit | fc9d54dbcc9a8d616e055538f7151bfbc83af27b (patch) | |
tree | aedebca5d994829c62c5276e8d7892eba4a08616 /sys/net/if_mpe.c | |
parent | make SIOCGETLABEL fail with EADDRNOTAVAIL if the label is not set. (diff) | |
download | wireguard-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.c | 15 |
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 || |