libs/core: introduce get_status_by_address() in luci.model.network
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 21 Nov 2012 20:13:53 +0000 (20:13 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 21 Nov 2012 20:13:53 +0000 (20:13 +0000)
libs/core/luasrc/model/network.lua

index cc572298c69b5262f02af232ab45040a528c0627..56f1751f8195732409936a50571e0259f53123bd 100644 (file)
@@ -623,6 +623,32 @@ function get_status_by_route(self, addr, mask)
        end
 end
 
+function get_status_by_address(self, addr)
+       local _, object
+       for _, object in ipairs(_ubus:objects()) do
+               local net = object:match("^network%.interface%.(.+)")
+               if net then
+                       local s = _ubus:call(object, "status", {})
+                       if s and s['ipv4-address'] then
+                               local a
+                               for _, a in ipairs(s['ipv4-address']) do
+                                       if a.address == addr then
+                                               return net, s
+                                       end
+                               end
+                       end
+                       if s and s['ipv6-address'] then
+                               local a
+                               for _, a in ipairs(s['ipv6-address']) do
+                                       if a.address == addr then
+                                               return net, s
+                                       end
+                               end
+                       end
+               end
+       end
+end
+
 function get_wannet(self)
        local net = self:get_status_by_route("0.0.0.0", 0)
        return net and network(net)