2008-11-14 17:41:16 +00:00
|
|
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
|
|
|
|
/*
|
|
|
|
|
* libnm_glib -- Access network status & information from glib applications
|
|
|
|
|
*
|
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This library 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
|
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the
|
|
|
|
|
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
|
* Boston, MA 02110-1301 USA.
|
|
|
|
|
*
|
|
|
|
|
* Copyright (C) 2007 - 2008 Novell, Inc.
|
|
|
|
|
* Copyright (C) 2007 - 2008 Red Hat, Inc.
|
|
|
|
|
*/
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
#ifndef NM_VPN_PLUGIN_H
|
|
|
|
|
#define NM_VPN_PLUGIN_H
|
|
|
|
|
|
2009-01-19 00:16:40 -05:00
|
|
|
#include <glib.h>
|
2007-09-12 16:23:53 +00:00
|
|
|
#include <glib-object.h>
|
|
|
|
|
#include <dbus/dbus-glib.h>
|
|
|
|
|
#include <NetworkManagerVPN.h>
|
2007-09-26 15:42:09 +00:00
|
|
|
#include <nm-connection.h>
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
|
|
|
|
|
|
#define NM_TYPE_VPN_PLUGIN (nm_vpn_plugin_get_type ())
|
|
|
|
|
#define NM_VPN_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_PLUGIN, NMVPNPlugin))
|
|
|
|
|
#define NM_VPN_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_PLUGIN, NMVPNPluginClass))
|
|
|
|
|
#define NM_IS_VPN_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_PLUGIN))
|
2012-07-27 13:15:54 +02:00
|
|
|
#define NM_IS_VPN_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_PLUGIN))
|
2007-09-12 16:23:53 +00:00
|
|
|
#define NM_VPN_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_PLUGIN, NMVPNPluginClass))
|
|
|
|
|
|
|
|
|
|
#define NM_VPN_PLUGIN_DBUS_SERVICE_NAME "service-name"
|
|
|
|
|
#define NM_VPN_PLUGIN_STATE "state"
|
|
|
|
|
|
2012-08-06 18:42:40 -05:00
|
|
|
/**
|
|
|
|
|
* NMVPNPluginError:
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_GENERAL: general failure
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS: the plugin is already starting,
|
|
|
|
|
* and another connect request was received
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_ALREADY_STARTED: the plugin is already connected, and
|
|
|
|
|
* another connect request was received
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS: the plugin is already stopping,
|
|
|
|
|
* and another stop request was received
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED: the plugin is already stopped, and
|
|
|
|
|
* another disconnect request was received
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_WRONG_STATE: the operation could not be performed in
|
|
|
|
|
* this state
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS: the operation could not be performed as
|
|
|
|
|
* the request contained malformed arguments, or arguments of unexpected type.
|
|
|
|
|
* Usually means that one of the VPN setting data items or secrets was not of
|
|
|
|
|
* the expected type (ie int, string, bool, etc).
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED: a child process failed to launch
|
|
|
|
|
* @NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID: the operation could not be performed
|
|
|
|
|
* because the connection was invalid. Usually means that the connection's
|
|
|
|
|
* VPN setting was missing some required data item or secret.
|
|
|
|
|
*
|
|
|
|
|
* Returned by the VPN service plugin to indicate errors.
|
|
|
|
|
**/
|
2007-09-12 16:23:53 +00:00
|
|
|
typedef enum {
|
2012-03-09 09:39:58 -05:00
|
|
|
NM_VPN_PLUGIN_ERROR_GENERAL, /*< nick=General >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_STARTING_IN_PROGRESS, /*< nick=StartingInProgress >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_ALREADY_STARTED, /*< nick=AlreadyStarted >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_STOPPING_IN_PROGRESS, /*< nick=StoppingInProgress >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_ALREADY_STOPPED, /*< nick=AlreadyStopped >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_WRONG_STATE, /*< nick=WrongState >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, /*< nick=BadArguments >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED, /*< nick=LaunchFailed >*/
|
|
|
|
|
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/
|
2007-09-12 16:23:53 +00:00
|
|
|
} NMVPNPluginError;
|
|
|
|
|
|
|
|
|
|
#define NM_VPN_PLUGIN_ERROR (nm_vpn_plugin_error_quark ())
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
GObject parent;
|
|
|
|
|
} NMVPNPlugin;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
GObjectClass parent;
|
|
|
|
|
|
|
|
|
|
/* virtual methods */
|
2012-05-04 09:53:19 -04:00
|
|
|
gboolean (*connect) (NMVPNPlugin *plugin,
|
|
|
|
|
NMConnection *connection,
|
|
|
|
|
GError **err);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
2007-09-27 02:20:53 +00:00
|
|
|
gboolean (*need_secrets) (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
NMConnection *connection,
|
|
|
|
|
char **setting_name,
|
|
|
|
|
GError **error);
|
2007-09-27 02:20:53 +00:00
|
|
|
|
2012-05-04 09:53:19 -04:00
|
|
|
gboolean (*disconnect) (NMVPNPlugin *plugin,
|
|
|
|
|
GError **err);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
/* Signals */
|
|
|
|
|
void (*state_changed) (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
NMVPNServiceState state);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
void (*ip4_config) (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
GHashTable *ip4_config);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
void (*login_banner) (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
const char *banner);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
void (*failure) (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
NMVPNPluginFailure reason);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
void (*quit) (NMVPNPlugin *plugin);
|
2009-09-30 09:20:44 -07:00
|
|
|
|
vpn: support IPv6 over VPNs
Add new API to allow passing both IPv4 and IPv6 configuration
information from VPN plugins to the backend.
Now instead of a single Ip4Config, a plugin has Config, Ip4Config, and
Ip6Config. "Config" contains information which is neither IPv4 nor
IPv6 specific, and also indicates which of Ip4Config and Ip6Config are
present. Ip4Config now only contains the IPv4-specific bits of
configuration.
There is backward compatibility in both directions: if the daemon is
new and the VPN plugin is old, then NM will notice that the plugin
emitted the Ip4Config signal without having emitted the Config signal
first, and so will assume that it is IPv4-only, and that the generic
bits of configuration have been included with the Ip4Config. If the
daemon is old and the plugin is new, then NMVPNPlugin will copy the
values from the generic config into the IPv4 config as well. (In fact,
NMVPNPlugin *always* does this, because it's harmless, and it's easier
than actually checking the daemon version.)
Currently the VPN is still configured all-at-once, after both IPv4 and
IPv6 information has been received, but the APIs allow for the
possibility of configuring them one at a time in the future.
2012-05-04 15:50:07 -04:00
|
|
|
void (*config) (NMVPNPlugin *plugin,
|
|
|
|
|
GHashTable *config);
|
|
|
|
|
|
|
|
|
|
void (*ip6_config) (NMVPNPlugin *plugin,
|
|
|
|
|
GHashTable *config);
|
|
|
|
|
|
2009-09-30 09:20:44 -07:00
|
|
|
/* Padding for future expansion */
|
|
|
|
|
void (*_reserved1) (void);
|
|
|
|
|
void (*_reserved2) (void);
|
|
|
|
|
void (*_reserved3) (void);
|
|
|
|
|
void (*_reserved4) (void);
|
2007-09-12 16:23:53 +00:00
|
|
|
} NMVPNPluginClass;
|
|
|
|
|
|
|
|
|
|
GType nm_vpn_plugin_get_type (void);
|
|
|
|
|
GQuark nm_vpn_plugin_error_quark (void);
|
|
|
|
|
GType nm_vpn_plugin_error_get_type (void);
|
|
|
|
|
|
|
|
|
|
DBusGConnection *nm_vpn_plugin_get_connection (NMVPNPlugin *plugin);
|
|
|
|
|
NMVPNServiceState nm_vpn_plugin_get_state (NMVPNPlugin *plugin);
|
|
|
|
|
void nm_vpn_plugin_set_state (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
NMVPNServiceState state);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
void nm_vpn_plugin_set_login_banner (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
const char *banner);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
void nm_vpn_plugin_failure (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
NMVPNPluginFailure reason);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
vpn: support IPv6 over VPNs
Add new API to allow passing both IPv4 and IPv6 configuration
information from VPN plugins to the backend.
Now instead of a single Ip4Config, a plugin has Config, Ip4Config, and
Ip6Config. "Config" contains information which is neither IPv4 nor
IPv6 specific, and also indicates which of Ip4Config and Ip6Config are
present. Ip4Config now only contains the IPv4-specific bits of
configuration.
There is backward compatibility in both directions: if the daemon is
new and the VPN plugin is old, then NM will notice that the plugin
emitted the Ip4Config signal without having emitted the Config signal
first, and so will assume that it is IPv4-only, and that the generic
bits of configuration have been included with the Ip4Config. If the
daemon is old and the plugin is new, then NMVPNPlugin will copy the
values from the generic config into the IPv4 config as well. (In fact,
NMVPNPlugin *always* does this, because it's harmless, and it's easier
than actually checking the daemon version.)
Currently the VPN is still configured all-at-once, after both IPv4 and
IPv6 information has been received, but the APIs allow for the
possibility of configuring them one at a time in the future.
2012-05-04 15:50:07 -04:00
|
|
|
void nm_vpn_plugin_set_config (NMVPNPlugin *plugin,
|
|
|
|
|
GHashTable *config);
|
|
|
|
|
|
2007-09-12 16:23:53 +00:00
|
|
|
void nm_vpn_plugin_set_ip4_config (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
GHashTable *ip4_config);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
vpn: support IPv6 over VPNs
Add new API to allow passing both IPv4 and IPv6 configuration
information from VPN plugins to the backend.
Now instead of a single Ip4Config, a plugin has Config, Ip4Config, and
Ip6Config. "Config" contains information which is neither IPv4 nor
IPv6 specific, and also indicates which of Ip4Config and Ip6Config are
present. Ip4Config now only contains the IPv4-specific bits of
configuration.
There is backward compatibility in both directions: if the daemon is
new and the VPN plugin is old, then NM will notice that the plugin
emitted the Ip4Config signal without having emitted the Config signal
first, and so will assume that it is IPv4-only, and that the generic
bits of configuration have been included with the Ip4Config. If the
daemon is old and the plugin is new, then NMVPNPlugin will copy the
values from the generic config into the IPv4 config as well. (In fact,
NMVPNPlugin *always* does this, because it's harmless, and it's easier
than actually checking the daemon version.)
Currently the VPN is still configured all-at-once, after both IPv4 and
IPv6 information has been received, but the APIs allow for the
possibility of configuring them one at a time in the future.
2012-05-04 15:50:07 -04:00
|
|
|
void nm_vpn_plugin_set_ip6_config (NMVPNPlugin *plugin,
|
|
|
|
|
GHashTable *ip6_config);
|
|
|
|
|
|
2007-09-12 16:23:53 +00:00
|
|
|
gboolean nm_vpn_plugin_disconnect (NMVPNPlugin *plugin,
|
2012-05-04 09:53:19 -04:00
|
|
|
GError **err);
|
2007-09-12 16:23:53 +00:00
|
|
|
|
|
|
|
|
G_END_DECLS
|
|
|
|
|
|
|
|
|
|
#endif /* NM_VPN_PLUGIN_H */
|