luci-mod-network: issue with breakdown of dnsmasq after duplication of static IP...
authorOleksandr Pastushkov <[email protected]>
Sun, 3 Jan 2021 22:58:56 +0000 (00:58 +0200)
committerRafał Miłecki <[email protected]>
Thu, 27 May 2021 10:18:42 +0000 (12:18 +0200)
Before this commit, assigning the same static IP address to two
different hosts disabled dnsmasq.

Logic of adding a new static lease was modified. If user try to assign a
new MAC address to already reserved IP, old lease will be modified (list
of MAC addresses will be extended by new MAC) instead of creation a new lease with the same IP.

Signed-off-by: Oleksandr Pastushkov <[email protected]>
(cherry picked from commit 463e910119813aaea0755ff5c16c91ce412a8cbb)

modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js

index c2a77f2b0cadca1962268dfc8ea641249d1070a1..253b37b846abdd25dfcbcab8d20dc43b30e4ae0f 100644 (file)
@@ -469,6 +469,25 @@ return view.extend({
                        so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
                });
 
+               so.write = function(section, value) {
+                       var ip = this.map.lookupOption('ip', section)[0].formvalue(section);
+                       var hosts = uci.sections('dhcp', 'host');
+                       var section_removed = false;
+
+                       for (var i = 0; i < hosts.length; i++) {
+                               if (ip == hosts[i].ip) {
+                                       uci.set('dhcp', hosts[i]['.name'], 'mac', [hosts[i].mac, value].join(' '));
+                                       uci.remove('dhcp', section);
+                                       section_removed = true;
+                                       break;
+                               }
+                       }
+
+                       if (!section_removed) {
+                               uci.set('dhcp', section, 'mac', value);
+                       }
+               }
+
                so = ss.option(form.Value, 'ip', _('<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address'));
                so.datatype = 'or(ip4addr,"ignore")';
                so.validate = function(section, value) {