docs: def parse_cidr (addr, infer=True, allow_host=False):
    """
    Takes a CIDR address or plain dotted-quad, and returns a tuple of address
    and count-of-network-bits.
    Can infer the network bits based on network classes if infer=True.
    Can also take a string in the form 'address/netmask', as long as the
    netmask is representable in CIDR.
  
    FIXME: This function is badly named.
    """
    def check (r0, r1):
      a = int(r0)
      b = r1
      if (not allow_host) and (a & ((1<<b)-1)):
        raise RuntimeError("Host part of CIDR address is not zero (%s)"
                           % (addr,))
      return (r0,32-r1)
  
    addr = addr.split('/', 2)
    if len(addr) == 1:
      if infer is False:
        return check(IPAddr(addr[0]), 0)
      addr = IPAddr(addr[0])
      b = 32-infer_netmask(addr)
      m = (1<<b)-1
      if (int(addr) & m) == 0:
        # All bits in wildcarded part are 0, so we'll use the wildcard
        return check(addr, b)
      else:
        # Some bits in the wildcarded part are set, so we'll assume it's a host
        return check(addr, 0)
    try:
      wild = 32-int(addr[1])
    except:
      # Maybe they passed a netmask
      m = int(IPAddr(addr[1]))
      b = 0
      while m & (1<<31):
        b += 1
        m <<= 1
      if m & 0x7fffffff != 0:
        raise RuntimeError("Netmask " + str(addr[1]) + " is not CIDR-compatible")
      wild = 32-b
      if not (wild >= 0 and wild <= 32):
        raise RuntimeError("Invalid mask length")
      return check(IPAddr(addr[0]), wild)
    if not (wild >= 0 and wild <= 32):
      raise RuntimeError("Invalid mask length")
    return check(IPAddr(addr[0]), wild)