async def METHOD_NAME(interfaces, dst_mac=None):
    """Start responding to ICMP requests received from the interfaces."""
    pause_events = {interface: asyncio.Event() for interface in interfaces}
    create_control_pipe()
    # NOTE: the read fd is open with O_NONBLOCK as no writer is not available
    # and the dummy write fd is used to keep the read fd open
    reader_fd = os.fdopen(
        os.open(ICMP_RESPONDER_PIPE, os.O_RDONLY | os.O_NONBLOCK))
    _ = open(ICMP_RESPONDER_PIPE, "w")
    tasks = [icmp_responder(interface, event, dst_mac=dst_mac)
             for interface, event in list(pause_events.items())]
    tasks.append(responder_control(reader_fd, pause_events))
    loop = asyncio.get_running_loop()
    loop.add_signal_handler(signal.SIGINT, functools.partial(stop_tasks, loop))
    loop.add_signal_handler(
        signal.SIGTERM, functools.partial(stop_tasks, loop))
    await asyncio.gather(*tasks, return_exceptions=True)