Message ID | 20191204130450.14177-1-fe@dev.tdt.de |
---|---|
State | Superseded |
Headers | show |
Series | [OpenWrt-Devel] wireguard: fix interface remove on lonely peers | expand |
Hi, commit message should be redacted. Best Adrian > -----Original Message----- > From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org] > On Behalf Of Florian Eckert > Sent: Mittwoch, 4. Dezember 2019 14:05 > To: Eckert.Florian@googlemail.com; Jason@zx2c4.com; ldir@darbyshire- > bryant.me.uk; daniel.engberg.lists@pyret.net > Cc: openwrt-devel@lists.openwrt.org; Florian Eckert <fe@dev.tdt.de> > Subject: [OpenWrt-Devel] [PATCH] wireguard: fix interface remove on lonely > peers > > Redmine-patch-id: 4230 > If we delete the main wireguard interface, then the related are not delete. > They remain in the network configuration. > > With this commit wo get called on a network config change, and check if each > wireguard peer has an interface. If this is not the case delete alle peers that > do not have a related wireguard interface. > > Signed-off-by: Florian Eckert <fe@dev.tdt.de> > --- > This was discussed on the irc with Kevin Darbyshire-Bryant alias ldir on the irc > that this is a bug and should be get fixed. > > package/network/services/wireguard/Makefile | 2 ++ > .../services/wireguard/files/wireguard.init | 31 +++++++++++++++++++ > 2 files changed, 33 insertions(+) > create mode 100644 > package/network/services/wireguard/files/wireguard.init > > diff --git a/package/network/services/wireguard/Makefile > b/package/network/services/wireguard/Makefile > index ea34b7550b..d78fcfface 100644 > --- a/package/network/services/wireguard/Makefile > +++ b/package/network/services/wireguard/Makefile > @@ -93,6 +93,8 @@ define Package/wireguard-tools/install > $(INSTALL_BIN) ./files/wireguard_watchdog $(1)/usr/bin/ > $(INSTALL_DIR) $(1)/lib/netifd/proto/ > $(INSTALL_BIN) ./files/wireguard.sh $(1)/lib/netifd/proto/ > + $(INSTALL_DIR) $(1)/etc/init.d/ > + $(INSTALL_BIN) ./files/wireguard.init $(1)/etc/init.d/wireguard > endef > > define KernelPackage/wireguard > diff --git a/package/network/services/wireguard/files/wireguard.init > b/package/network/services/wireguard/files/wireguard.init > new file mode 100644 > index 0000000000..781d0839bc > --- /dev/null > +++ b/package/network/services/wireguard/files/wireguard.init > @@ -0,0 +1,31 @@ > +#!/bin/sh /etc/rc.common > + > +START=80 > +USE_PROCD=1 > + > +service_triggers() { > + procd_add_reload_trigger "network" > +} > + > +reload_service() { > + # delete old peers of related wireguard interface > + wireguard_check_peers > +} > + > +wireguard_check_peers() { > + local iface peer > + > + # get all wireguard peers > + for peer in $(uci show network | grep =wireguard_); do > + # extract peer section type > + peer="${peer##*=}" > + # extract interface name > + iface="${peer#*_}" > + > + # delete peer if iface is not present anymore > + if ! uci -q show "network.${iface}" 1>/dev/null 2>/dev/null; > then > + uci -q delete "network.@${peer}[-1]" > + uci commit network > + fi > + done > +} > -- > 2.20.1 > > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff --git a/package/network/services/wireguard/Makefile b/package/network/services/wireguard/Makefile index ea34b7550b..d78fcfface 100644 --- a/package/network/services/wireguard/Makefile +++ b/package/network/services/wireguard/Makefile @@ -93,6 +93,8 @@ define Package/wireguard-tools/install $(INSTALL_BIN) ./files/wireguard_watchdog $(1)/usr/bin/ $(INSTALL_DIR) $(1)/lib/netifd/proto/ $(INSTALL_BIN) ./files/wireguard.sh $(1)/lib/netifd/proto/ + $(INSTALL_DIR) $(1)/etc/init.d/ + $(INSTALL_BIN) ./files/wireguard.init $(1)/etc/init.d/wireguard endef define KernelPackage/wireguard diff --git a/package/network/services/wireguard/files/wireguard.init b/package/network/services/wireguard/files/wireguard.init new file mode 100644 index 0000000000..781d0839bc --- /dev/null +++ b/package/network/services/wireguard/files/wireguard.init @@ -0,0 +1,31 @@ +#!/bin/sh /etc/rc.common + +START=80 +USE_PROCD=1 + +service_triggers() { + procd_add_reload_trigger "network" +} + +reload_service() { + # delete old peers of related wireguard interface + wireguard_check_peers +} + +wireguard_check_peers() { + local iface peer + + # get all wireguard peers + for peer in $(uci show network | grep =wireguard_); do + # extract peer section type + peer="${peer##*=}" + # extract interface name + iface="${peer#*_}" + + # delete peer if iface is not present anymore + if ! uci -q show "network.${iface}" 1>/dev/null 2>/dev/null; then + uci -q delete "network.@${peer}[-1]" + uci commit network + fi + done +}
Redmine-patch-id: 4230 If we delete the main wireguard interface, then the related are not delete. They remain in the network configuration. With this commit wo get called on a network config change, and check if each wireguard peer has an interface. If this is not the case delete alle peers that do not have a related wireguard interface. Signed-off-by: Florian Eckert <fe@dev.tdt.de> --- This was discussed on the irc with Kevin Darbyshire-Bryant alias ldir on the irc that this is a bug and should be get fixed. package/network/services/wireguard/Makefile | 2 ++ .../services/wireguard/files/wireguard.init | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 package/network/services/wireguard/files/wireguard.init