luci-0.8: merge r3809-r3822
[project/luci.git] / libs / core / luasrc / ip.lua
index 75311bfc74685a1cce492cfa38daf8d1bc7a9e97..590ea76b2f5b60209aa5721e9929b69f648733e3 100644 (file)
@@ -314,7 +314,7 @@ function Hex( hex, prefix, family, swap )
                end
        end
 
-       return __bless({ family, data, len })
+       return __bless({ family, data, prefix })
 end
 
 
@@ -414,7 +414,8 @@ function cidr.equal( self, addr )
 end
 
 --- Return the prefix length of this CIDR instance.
--- @return     Prefix length in bit
+-- @param mask Override instance prefix with given netmask (optional)
+-- @return             Prefix length in bit
 function cidr.prefix( self, mask )
        local prefix = self[3]
 
@@ -480,7 +481,7 @@ end
 -- @see                        cidr.broadcast
 -- @see                        cidr.mask
 function cidr.host( self )
-       return __bless({ self[1], data, __maxlen(self[1]) })
+       return __bless({ self[1], self[2], __maxlen(self[1]) })
 end
 
 --- Return a corresponding CIDR representing the netmask of this instance.
@@ -550,19 +551,17 @@ function cidr.add( self, amount, inplace )
        local data   = { unpack(self[2]) }
        local shorts = __array16( amount, self[1] )
 
-       if shorts then
-               for pos = #data, 1, -1 do
-                       local add = ( #shorts > 0 ) and table.remove( shorts, #shorts ) or 0
-                       if ( data[pos] + add ) > 0xFFFF then
-                               data[pos] = ( data[pos] + add ) % 0xFFFF
-                               if pos > 1 then
-                                       data[pos-1] = data[pos-1] + ( add - data[pos] )
-                               else
-                                       return nil
-                               end
+       for pos = #data, 1, -1 do
+               local add = ( #shorts > 0 ) and table.remove( shorts, #shorts ) or 0
+               if ( data[pos] + add ) > 0xFFFF then
+                       data[pos] = ( data[pos] + add ) % 0xFFFF
+                       if pos > 1 then
+                               data[pos-1] = data[pos-1] + ( add - data[pos] )
                        else
-                               data[pos] = data[pos] + add
+                               return nil
                        end
+               else
+                       data[pos] = data[pos] + add
                end
        end
 
@@ -583,19 +582,17 @@ function cidr.sub( self, amount, inplace )
        local data   = { unpack(self[2]) }
        local shorts = __array16( amount, self[1] )
 
-       if shorts then
-               for pos = #data, 1, -1 do
-                       local sub = ( #shorts > 0 ) and table.remove( shorts, #shorts ) or 0
-                       if ( data[pos] - sub ) < 0 then
-                               data[pos] = ( sub - data[pos] ) % 0xFFFF
-                               if pos > 1 then
-                                       data[pos-1] = data[pos-1] - ( sub + data[pos] )
-                               else
-                                       return nil
-                               end
+       for pos = #data, 1, -1 do
+               local sub = ( #shorts > 0 ) and table.remove( shorts, #shorts ) or 0
+               if ( data[pos] - sub ) < 0 then
+                       data[pos] = ( sub - data[pos] ) % 0xFFFF
+                       if pos > 1 then
+                               data[pos-1] = data[pos-1] - ( sub + data[pos] )
                        else
-                               data[pos] = data[pos] - sub
+                               return nil
                        end
+               else
+                       data[pos] = data[pos] - sub
                end
        end