xref: /netbsd-src/external/bsd/libfido2/dist/src/netlink.h (revision 2d40c4512a84c0d064ec30a492c5e2a14d230bc3)
195dbdf32Schristos /*
295dbdf32Schristos  * Copyright (c) 2020 Yubico AB. All rights reserved.
395dbdf32Schristos  * Use of this source code is governed by a BSD-style
495dbdf32Schristos  * license that can be found in the LICENSE file.
5*2d40c451Schristos  * SPDX-License-Identifier: BSD-2-Clause
695dbdf32Schristos  */
795dbdf32Schristos 
895dbdf32Schristos #ifndef _FIDO_NETLINK_H
995dbdf32Schristos #define _FIDO_NETLINK_H
1095dbdf32Schristos 
1195dbdf32Schristos #include <sys/socket.h>
1295dbdf32Schristos 
1395dbdf32Schristos #include <linux/genetlink.h>
1495dbdf32Schristos #include <linux/netlink.h>
1595dbdf32Schristos #include <linux/nfc.h>
1695dbdf32Schristos 
1795dbdf32Schristos #include <stdlib.h>
1895dbdf32Schristos #include <stdint.h>
1995dbdf32Schristos 
2095dbdf32Schristos #ifdef __cplusplus
2195dbdf32Schristos extern "C" {
2295dbdf32Schristos #endif /* __cplusplus */
2395dbdf32Schristos 
2495dbdf32Schristos typedef struct fido_nl {
2595dbdf32Schristos 	int                fd;
2695dbdf32Schristos 	uint16_t           nfc_type;
2795dbdf32Schristos 	uint32_t           nfc_mcastgrp;
2895dbdf32Schristos 	struct sockaddr_nl saddr;
2995dbdf32Schristos } fido_nl_t;
3095dbdf32Schristos 
3195dbdf32Schristos fido_nl_t *fido_nl_new(void);
3295dbdf32Schristos void fido_nl_free(struct fido_nl **);
3395dbdf32Schristos int fido_nl_power_nfc(struct fido_nl *, uint32_t);
3495dbdf32Schristos int fido_nl_get_nfc_target(struct fido_nl *, uint32_t , uint32_t *);
3595dbdf32Schristos 
3695dbdf32Schristos #ifdef FIDO_FUZZ
3795dbdf32Schristos void set_netlink_io_functions(ssize_t (*)(int, void *, size_t),
3895dbdf32Schristos     ssize_t (*)(int, const void *, size_t));
3995dbdf32Schristos #endif
4095dbdf32Schristos 
4195dbdf32Schristos #ifdef __cplusplus
4295dbdf32Schristos } /* extern "C" */
4395dbdf32Schristos #endif /* __cplusplus */
4495dbdf32Schristos 
4595dbdf32Schristos #endif /* !_FIDO_NETLINK_H */
46