summaryrefslogtreecommitdiff
path: root/include/mesh.h
blob: 547c237e32ffc4789d8f210f7660d43b676ef68d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
 *
 *  Connection Manager
 *
 *
 *  Copyright (C) 2017 Samsung Electronics Co., Ltd.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 *  02110-1301  USA
 */

#ifndef __CONNMAN_MESH_H
#define __CONNMAN_MESH_H

#include <gdbus.h>

#ifdef __cplusplus
extern "C" {
#endif

struct connman_mesh;

enum connman_mesh_security {
	CONNMAN_MESH_SECURITY_UNKNOWN = 0,
	CONNMAN_MESH_SECURITY_NONE    = 1,
	CONNMAN_MESH_SECURITY_SAE     = 2,
};

enum connman_mesh_state {
	CONNMAN_MESH_STATE_UNKNOWN       = 0,
	CONNMAN_MESH_STATE_IDLE          = 1,
	CONNMAN_MESH_STATE_ASSOCIATION   = 2,
	CONNMAN_MESH_STATE_CONFIGURATION = 3,
	CONNMAN_MESH_STATE_READY         = 4,
	CONNMAN_MESH_STATE_DISCONNECT    = 5,
	CONNMAN_MESH_STATE_FAILURE       = 6,
};

enum connman_mesh_peer_type {
	CONNMAN_MESH_PEER_TYPE_CREATED    = 0,
	CONNMAN_MESH_PEER_TYPE_DISCOVERED = 1,
};

enum connman_mesh_peer_disconnect_reason {
	CONNMAN_MESH_REASON_UNKNOWN          = 0,
	CONNMAN_MESH_DEAUTH_LEAVING          = 1,
	CONNMAN_MESH_PEERING_CANCELLED       = 2,
	CONNMAN_MESH_MAX_PEERS               = 3,
	CONNMAN_MESH_CONFIG_POLICY_VIOLATION = 4,
	CONNMAN_MESH_CLOSE_RCVD              = 5,
	CONNMAN_MESH_MAX_RETRIES             = 6,
	CONNMAN_MESH_CONFIRM_TIMEOUT         = 7,
	CONNMAN_MESH_INVALID_GTK             = 8,
	CONNMAN_MESH_INCONSISTENT_PARAMS     = 9,
	CONNMAN_MESH_INVALID_SECURITY_CAP    = 10,
};

enum connman_mesh_peer_status {
	CONNMAN_MESH_PEER_ADD    = 0,
	CONNMAN_MESH_PEER_REMOVE = 1,
};

struct connman_mesh *connman_mesh_create(const char *interface_addr,
									const char *identifier);

void connman_mesh_set_name(struct connman_mesh *mesh, const char *name);
const char *connman_mesh_get_name(struct connman_mesh *mesh);
void connman_mesh_set_passphrase(struct connman_mesh *mesh,
								 const char *passphrase);
const char *connman_mesh_get_passphrase(struct connman_mesh *mesh);
void connman_mesh_set_address(struct connman_mesh *mesh, const char *address);
void connman_mesh_set_security(struct connman_mesh *mesh, const char *security);
const char *connman_mesh_get_security(struct connman_mesh *mesh);
void connman_mesh_set_frequency(struct connman_mesh *mesh, uint16_t frequency);
uint16_t connman_mesh_get_frequency(struct connman_mesh *mesh);
void connman_mesh_set_ieee80211w(struct connman_mesh *mesh, uint16_t ieee80211w);
uint16_t connman_mesh_get_ieee80211w(struct connman_mesh *mesh);
int connman_mesh_peer_set_state(struct connman_mesh *mesh,
								enum connman_mesh_state new_state);
void connman_mesh_set_peer_type(struct connman_mesh *mesh,
								enum connman_mesh_peer_type type);
bool connman_mesh_peer_is_connected_state(struct connman_mesh *mesh);
struct connman_mesh *connman_get_connected_mesh_from_name(char *name);
struct connman_mesh *connman_get_connecting_mesh_from_name(char *name);
void connman_mesh_set_index(struct connman_mesh *mesh, int index);
void connman_mesh_set_strength(struct connman_mesh *mesh, uint8_t strength);
void connman_mesh_peer_set_disconnect_reason(struct connman_mesh *mesh,
						int disconnect_reason);
void __connman_mesh_add_ethernet_to_bridge(void);
void __connman_mesh_remove_ethernet_from_bridge(void);
int __connman_mesh_change_peer_status(DBusMessage *msg,
				       const char *peer_address,
				       enum connman_mesh_peer_status status);

int connman_mesh_register(struct connman_mesh *mesh);
void connman_mesh_unregister(struct connman_mesh *mesh);

int __connman_mesh_add_virtual_interface(const char *ifname,
					  const char *parent_ifname, const char *bridge_ifname);

int __connman_mesh_remove_virtual_interface(const char *ifname);
int __connman_mesh_set_stp_gate_announce(bool gate_announce, int hwmp_rootmode,
					  int stp);

const char *connman_mesh_get_interface_name(void);
bool connman_mesh_is_interface_created(void);

struct connman_mesh *connman_mesh_get(const char *interface_addr,
				       const char *identifier);

int connman_mesh_notify_interface_create(bool success);
int connman_mesh_notify_interface_remove(bool success);

int connman_mesh_add_connected_peer(const char *peer_address);
int connman_mesh_remove_connected_peer(const char *peer_address, int reason);

typedef void (*mesh_change_peer_status_cb_t) (int result, void *user_data);

struct connman_mesh_driver {
	int (*add_interface) (const char *ifname, const char *parent_ifname);
	int (*remove_interface) (const char *ifname);
	int (*connect) (struct connman_mesh *mesh);
	int (*disconnect) (struct connman_mesh *mesh);
	int (*change_peer_status) (const char *peer_address,
						enum connman_mesh_peer_status status,
						mesh_change_peer_status_cb_t callback, void *user_data);
};

int connman_mesh_driver_register(struct connman_mesh_driver *driver);
void connman_mesh_driver_unregister(struct connman_mesh_driver *driver);

struct connman_mesh_eth_driver {
	int (*add_to_bridge) (const char *bridge);
	int (*remove_from_bridge) (const char *bridge);
};

int connman_mesh_eth_driver_register(struct connman_mesh_eth_driver *driver);
void connman_mesh_eth_driver_unregister(struct connman_mesh_eth_driver *driver);

#ifdef __cplusplus
}
#endif

#endif /* __CONNMAN_MESH_H */