1/*
2 * Copyright (c) 2020 Yubico AB. All rights reserved.
3 * Use of this source code is governed by a BSD-style
4 * license that can be found in the LICENSE file.
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#ifndef _FIDO_NETLINK_H
9#define _FIDO_NETLINK_H
10
11#include <sys/socket.h>
12
13#include <linux/genetlink.h>
14#include <linux/netlink.h>
15#include <linux/nfc.h>
16
17#include <stdlib.h>
18#include <stdint.h>
19
20#ifdef __cplusplus
21extern "C" {
22#endif /* __cplusplus */
23
24typedef struct fido_nl {
25	int                fd;
26	uint16_t           nfc_type;
27	uint32_t           nfc_mcastgrp;
28	struct sockaddr_nl saddr;
29} fido_nl_t;
30
31fido_nl_t *fido_nl_new(void);
32void fido_nl_free(struct fido_nl **);
33int fido_nl_power_nfc(struct fido_nl *, uint32_t);
34int fido_nl_get_nfc_target(struct fido_nl *, uint32_t , uint32_t *);
35
36#ifdef FIDO_FUZZ
37void set_netlink_io_functions(ssize_t (*)(int, void *, size_t),
38    ssize_t (*)(int, const void *, size_t));
39#endif
40
41#ifdef __cplusplus
42} /* extern "C" */
43#endif /* __cplusplus */
44
45#endif /* !_FIDO_NETLINK_H */
46