]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/include/spdk/net.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / include / spdk / net.h
CommitLineData
7c673cae
FG
1/*-
2 * BSD LICENSE
3 *
4 * Copyright (c) Intel Corporation.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
16 * distribution.
17 * * Neither the name of Intel Corporation nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/** \file
35 * Net framework abstraction layer
36 */
37
38#ifndef SPDK_NET_H
39#define SPDK_NET_H
40
11fdf7f2 41#include "spdk/stdinc.h"
7c673cae
FG
42
43#include "spdk/queue.h"
44
11fdf7f2
TL
45#ifdef __cplusplus
46extern "C" {
47#endif
7c673cae 48
11fdf7f2
TL
49struct spdk_sock;
50
51struct spdk_net_framework {
52 const char *name;
53
9f95a23c 54 void (*init)(void);
11fdf7f2
TL
55 void (*fini)(void);
56
57 STAILQ_ENTRY(spdk_net_framework) link;
7c673cae
FG
58};
59
11fdf7f2
TL
60/**
61 * Register a net framework.
62 *
63 * \param frame Net framework to register.
64 */
65void spdk_net_framework_register(struct spdk_net_framework *frame);
66
67#define SPDK_NET_FRAMEWORK_REGISTER(name, frame) \
68static void __attribute__((constructor)) net_framework_register_##name(void) \
69{ \
70 spdk_net_framework_register(frame); \
71}
72
73/**
74 * Initialize the network interfaces by getting information through netlink socket.
75 *
76 * \return 0 on success, 1 on failure.
77 */
78int spdk_interface_init(void);
79
80/**
81 * Destroy the network interfaces.
82 */
83void spdk_interface_destroy(void);
7c673cae 84
9f95a23c
TL
85/**
86 * Net framework initialization callback.
87 *
88 * \param cb_arg Callback argument.
89 * \param rc 0 if net framework initialized successfully or negative errno if it failed.
90 */
91typedef void (*spdk_net_init_cb)(void *cb_arg, int rc);
92
93/**
94 * Net framework finish callback.
95 *
96 * \param cb_arg Callback argument.
97 */
98typedef void (*spdk_net_fini_cb)(void *cb_arg);
99
100void spdk_net_framework_init_next(int rc);
101
11fdf7f2
TL
102/**
103 * Start all registered frameworks.
104 *
105 * \return 0 on success.
106 */
9f95a23c
TL
107void spdk_net_framework_start(spdk_net_init_cb cb_fn, void *cb_arg);
108
109void spdk_net_framework_fini_next(void);
7c673cae 110
11fdf7f2
TL
111/**
112 * Stop all registered frameworks.
113 */
9f95a23c 114void spdk_net_framework_fini(spdk_net_fini_cb cb_fn, void *cb_arg);
7c673cae 115
11fdf7f2
TL
116#ifdef __cplusplus
117}
118#endif
7c673cae 119
11fdf7f2 120#endif /* SPDK_NET_H */