core: misc style fixes to libnl compat code
[NetworkManager.git] / src / nm-netlink-monitor.h
1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* NetworkManager -- Network link manager
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  *
18  * Copyright (C) 2005 - 2010 Red Hat, Inc.
19  * Copyright (C) 2005 - 2008 Novell, Inc.
20  * Copyright (C) 2005 Ray Strode
21  */
22
23 #ifndef NM_NETLINK_MONITOR_H
24 #define NM_NETLINK_MONITOR_H
25
26 #include <glib.h>
27 #include <glib-object.h>
28 #include <netlink/netlink.h>
29 #include <netlink/route/link.h>
30
31 #define NM_TYPE_NETLINK_MONITOR            (nm_netlink_monitor_get_type ())
32 #define NM_NETLINK_MONITOR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_NETLINK_MONITOR, NMNetlinkMonitor))
33 #define NM_NETLINK_MONITOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_NETLINK_MONITOR, NMNetlinkMonitorClass))
34 #define NM_IS_NETLINK_MONITOR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_NETLINK_MONITOR))
35 #define NM_IS_NETLINK_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_NETLINK_MONITOR))
36 #define NM_NETLINK_MONITOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_NETLINK_MONITOR, NMNetlinkMonitorClass))
37
38 typedef enum {
39         NM_NETLINK_MONITOR_ERROR_GENERIC = 0,
40         NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_HANDLE,
41         NM_NETLINK_MONITOR_ERROR_NETLINK_CONNECT,
42         NM_NETLINK_MONITOR_ERROR_NETLINK_JOIN_GROUP,
43         NM_NETLINK_MONITOR_ERROR_NETLINK_ALLOC_LINK_CACHE,
44         NM_NETLINK_MONITOR_ERROR_PROCESSING_MESSAGE,
45         NM_NETLINK_MONITOR_ERROR_BAD_ALLOC,
46         NM_NETLINK_MONITOR_ERROR_WAITING_FOR_SOCKET_DATA,
47         NM_NETLINK_MONITOR_ERROR_LINK_CACHE_UPDATE
48 } NMNetlinkMonitorError;
49
50 typedef struct {
51         GObject parent; 
52 } NMNetlinkMonitor;
53
54 typedef struct {
55         GObjectClass parent_class;
56
57         /* Signals */
58         void (*notification) (NMNetlinkMonitor *monitor, struct nl_msg *msg);
59         void (*carrier_on)   (NMNetlinkMonitor *monitor, int index);
60         void (*carrier_off)  (NMNetlinkMonitor *monitor, int index);
61         void (*error)        (NMNetlinkMonitor *monitor, GError *error);
62 } NMNetlinkMonitorClass;
63
64
65 #define NM_NETLINK_MONITOR_ERROR      (nm_netlink_monitor_error_quark ())
66 GType  nm_netlink_monitor_get_type    (void) G_GNUC_CONST;
67 GQuark nm_netlink_monitor_error_quark (void) G_GNUC_CONST;
68
69 NMNetlinkMonitor *nm_netlink_monitor_get (void);
70
71 gboolean          nm_netlink_monitor_open_connection  (NMNetlinkMonitor *monitor,
72                                                        GError **error);
73 void              nm_netlink_monitor_close_connection (NMNetlinkMonitor *monitor);
74 void              nm_netlink_monitor_attach           (NMNetlinkMonitor *monitor);
75 void              nm_netlink_monitor_detach           (NMNetlinkMonitor *monitor);
76
77 gboolean          nm_netlink_monitor_subscribe        (NMNetlinkMonitor *monitor,
78                                                        int group,
79                                                        GError **error);
80 void              nm_netlink_monitor_unsubscribe      (NMNetlinkMonitor *monitor,
81                                                        int group);
82
83 gboolean          nm_netlink_monitor_request_ip6_info (NMNetlinkMonitor *monitor,
84                                                        GError **error);
85
86 gboolean          nm_netlink_monitor_request_status   (NMNetlinkMonitor *monitor,
87                                                        GError **error);
88 gboolean          nm_netlink_monitor_get_flags_sync   (NMNetlinkMonitor *monitor,
89                                                        guint32 ifindex,
90                                                        guint32 *ifflags,
91                                                        GError **error);
92
93 #include "nm-netlink-compat.h"
94
95 /* Generic utility functions */
96 int               nm_netlink_iface_to_index     (const char *iface);
97 char *            nm_netlink_index_to_iface     (int idx);
98 struct rtnl_link *nm_netlink_index_to_rtnl_link (int idx);
99 struct nl_sock *  nm_netlink_get_default_handle (void);
100
101 #endif  /* NM_NETLINK_MONITOR_H */