docs: def getmacbyip6(ip6, chainCC=0):
      """
      Returns the mac address to be used for provided 'ip6' peer. 
      neighborCache.get() method is used on instantiated neighbor cache.
      Resolution mechanism is described in associated doc string.
  
      (chainCC parameter value ends up being passed to sending function
       used to perform the resolution, if needed)
      """
  
      if in6_ismaddr(ip6): # Multicast 
          mac = in6_getnsmac(inet_pton(socket.AF_INET6, ip6))
          return mac
  
      iff,a,nh = conf.route6.route(ip6, dev=conf.iface6)
  
      if iff == LOOPBACK_NAME:
          return "ff:ff:ff:ff:ff:ff"
  
      if nh != '::': 
          ip6 = nh # Found next hop
  
      mac = conf.netcache.in6_neighbor.get(ip6)
      if mac:
          return mac
  
      res = neighsol(ip6, a, iff, chainCC=chainCC)
  
      if res is not None:
          if ICMPv6NDOptDstLLAddr in res:
              mac = res[ICMPv6NDOptDstLLAddr].lladdr
          else:
              mac = res.src
          conf.netcache.in6_neighbor[ip6] = mac
          return mac
  
      return None