docs: def route_add_loopback(routes=None, ipv6=False, iflist=None):
      """Add a route to 127.0.0.1 and ::1 to simplify unit tests on Windows"""
      if not WINDOWS:
          warning("Not available")
          return
      warning("This will completely mess up the routes. Testing purpose only !")
      # Add only if some adpaters already exist
      if ipv6:
          if not conf.route6.routes:
              return
      else:
          if not conf.route.routes:
              return
      data = {
          'name': scapy.consts.LOOPBACK_NAME,
          'description': "Loopback",
          'win_index': -1,
          'guid': "{0XX00000-X000-0X0X-X00X-00XXXX000XXX}",
          'invalid': True,
          'mac': '00:00:00:00:00:00',
          'ipv4_metric': 0,
          'ipv6_metric': 0,
          'ips': ["127.0.0.1", "::"]
      }
      adapter = NetworkInterface()
      adapter.pcap_name = "\\Device\\NPF_{0XX00000-X000-0X0X-X00X-00XXXX000XXX}"
      adapter.update(data)
      adapter.invalid = False
      adapter.ip = "127.0.0.1"
      if iflist:
          iflist.append(adapter.pcap_name)
          return
      # Remove all LOOPBACK_NAME routes
      for route in list(conf.route.routes):
          iface = route[3]
          if iface.name == scapy.consts.LOOPBACK_NAME:
              conf.route.routes.remove(route)
      # Remove LOOPBACK_NAME interface
      for devname, iface in list(IFACES.items()):
          if iface.name == scapy.consts.LOOPBACK_NAME:
              IFACES.pop(devname)
      # Inject interface
      IFACES["{0XX00000-X000-0X0X-X00X-00XXXX000XXX}"] = adapter
      scapy.consts.LOOPBACK_INTERFACE = adapter
      if isinstance(conf.iface, NetworkInterface):
          if conf.iface.name == scapy.consts.LOOPBACK_NAME:
              conf.iface = adapter
      if isinstance(conf.iface6, NetworkInterface):
          if conf.iface6.name == scapy.consts.LOOPBACK_NAME:
              conf.iface6 = adapter
      conf.netcache.arp_cache["127.0.0.1"] = "ff:ff:ff:ff:ff:ff"
      conf.netcache.in6_neighbor["::1"] = "ff:ff:ff:ff:ff:ff"
      # Build the packed network addresses
      loop_net = struct.unpack("!I", socket.inet_aton("127.0.0.0"))[0]
      loop_mask = struct.unpack("!I", socket.inet_aton("255.0.0.0"))[0]
      # Build the fake routes
      loopback_route = (loop_net, loop_mask, "0.0.0.0", adapter, "127.0.0.1", 1)
      loopback_route6 = ('::1', 128, '::', adapter, ["::1"], 1)
      loopback_route6_custom = ("fe80::", 128, "::", adapter, ["::1"], 1)
      if routes is None:
          # Injection
          conf.route6.routes.append(loopback_route6)
          conf.route6.routes.append(loopback_route6_custom)
          conf.route.routes.append(loopback_route)
          # Flush the caches
          conf.route6.invalidate_cache()
          conf.route.invalidate_cache()
      else:
          if ipv6:
              routes.append(loopback_route6)
              routes.append(loopback_route6_custom)
          else:
              routes.append(loopback_route)