Merge pull request #10322 from mattstep/devel

Add new function to ipaddr filter to return the nth host within a given network.
pull/10328/head
Brian Coca 10 years ago
commit af59e108a5

@ -152,9 +152,9 @@ def _multicast_query(v, value):
return value return value
def _net_query(v): def _net_query(v):
if v.size > 1: if v.size > 1:
if v.ip == v.network: if v.ip == v.network:
return str(v.network) + '/' + str(v.prefixlen) return str(v.network) + '/' + str(v.prefixlen)
def _netmask_query(v): def _netmask_query(v):
if v.size > 1: if v.size > 1:
@ -555,6 +555,38 @@ def ipsubnet(value, query = '', index = 'x'):
return False return False
# Returns the nth host within a network described by value.
# Usage:
#
# - address or address/prefix | nthhost(nth)
# returns the nth host within the given network
def nthhost(value, query=''):
''' Get the nth host within a given network '''
try:
vtype = ipaddr(value, 'type')
if vtype == 'address':
v = ipaddr(value, 'cidr')
elif vtype == 'network':
v = ipaddr(value, 'subnet')
value = netaddr.IPNetwork(v)
except:
return False
if not query:
return False
try:
vsize = ipaddr(v, 'size')
nth = int(query)
if value.size > nth:
return value[nth]
except ValueError:
return False
return False
# ---- HWaddr / MAC address filters ---- # ---- HWaddr / MAC address filters ----
@ -612,6 +644,7 @@ class FilterModule(object):
'ipv4': ipv4, 'ipv4': ipv4,
'ipv6': ipv6, 'ipv6': ipv6,
'ipsubnet': ipsubnet, 'ipsubnet': ipsubnet,
'nthhost': nthhost,
# MAC / HW addresses # MAC / HW addresses
'hwaddr': hwaddr, 'hwaddr': hwaddr,

Loading…
Cancel
Save