/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once

/***
  Copyright © 2014-2015 Intel Corporation. All rights reserved.
***/

#include <net/ethernet.h>
#include <netinet/in.h>
#include <stdbool.h>
#include <sys/uio.h>

#include "time-util.h"

#define IN6_ADDR_ALL_ROUTERS_MULTICAST                                  \
        ((const struct in6_addr) { { {                                  \
                0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         \
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,         \
         } } } )

#define IN6_ADDR_ALL_NODES_MULTICAST                                    \
        ((const struct in6_addr) { { {                                  \
                0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         \
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,         \
         } } } )

int icmp6_bind(int ifindex, bool is_router);
int icmp6_send(int fd, const struct in6_addr *dst, const struct iovec *iov, size_t n_iov);
int icmp6_receive(
                int fd,
                void *buffer,
                size_t size,
                struct in6_addr *ret_sender,
                triple_timestamp *ret_timestamp);