VPN-плагины ConnMan
VPN-плагины ConnMan предназначены для реализации взаимодействия между ConnMan и приложением, осуществляющим установление и остановку VPN-соединений.
Подключение: | #include <connman/vpn/plugins/vpn.h> |
Перечисления
- enum vpn_state
Структуры
- struct vpn_driver
Функции
- int vpn_register(const char *name, const struct vpn_driver *driver, const char *program);
- void vpn_unregister(const char *provider_name);
- void vpn_died(struct connman_task *task, int exit_code, void *user_data);
- int vpn_set_ifname(struct vpn_provider *provider, const char *ifname);
Детальное описание
Ключевой задачей при разработке VPN-плагина становится составление структуры
vpn-driver
.
Данная структура содержит набор методов, которые будет вызывать ConnMan во время установления
и работы VPN-соединения.
Сформированную структуру необходимо зарегистрировать в ConnMan путём вызова метода
vpn_register
.
Данный метод обычно вызывается в момент инициализации ConnMan-плагина.
В момент выгрузки VPN-плагина вызывается метод vpn_unregister
.
При подключении данного файла также происходит подключение файла
connman/vpn/vpn-provider.h
,
в котором определены методы для работы со структурой vpn-provider
.
Описание перечислений
enum vpn_state
В данном перечислении указаны возможные значения состояния VPN-соединения.
Название | Значение | Описание |
---|---|---|
VPN_STATE_UNKNOWN |
0 | Неизвестное состояние соединения |
VPN_STATE_IDLE |
1 | Соединение простаивает |
VPN_STATE_CONNECT |
2 | Соединение установлено |
VPN_STATE_READY |
3 | Соединение готово к установке |
VPN_STATE_DISCONNECT |
4 | Соединение отключено |
VPN_STATE_FAILURE |
5 | Ошибка в работе соединения |
VPN_STATE_AUTH_FAILURE |
6 | Ошибка аутентификации |
Описание структур
struct vpn_driver {
int flags;
int (*notify) (DBusMessage *msg, struct vpn_provider *provider);
int (*connect) (struct vpn_provider *provider,
struct connman_task *task, const char *if_name,
vpn_provider_connect_cb_t cb, const char *dbus_sender,
void *user_data);
void (*disconnect) (struct vpn_provider *provider);
int (*remove) (struct vpn_provider *provider);
int (*error_code) (struct vpn_provider *provider, int exit_code);
int (*save) (struct vpn_provider *provider, GKeyFile *keyfile);
int (*device_flags) (struct vpn_provider *provider);
int (*route_env_parse) (struct vpn_provider *provider, const char *key,
int *family, unsigned long *idx,
enum vpn_provider_route_type *type);
};
Структура vpn_driver
содержит в себе ссылки на функции,
которые вызываются ConnMan в процессе работы VPN-плагина.
Разработчик VPN-плагина должен реализовать все данные функции
и заполнить структуру соответствующими ссылками.
Поле .flags
описывает различные флаги, которые описывают данное соединение.
В настоящий момент поддерживается только установка флага VPN_FLAG_NO_TUN
.
Данный флаг обозначает, что при создании VPN-соединения не будет создан TUN-интерфейс.
Поле .notify
содержит ссылку на функцию:
int notify(DBusMessage *msg, struct vpn_provider *provider)`
Данная функция вызывается при поступлении сообщения в ConnMan VPN, для уведомления D-Bus для плагина.
Если, исходя из DBusMessage *msg
, VPN не будет установлен в качестве маршрута по умолчанию,
то вызывается функция vpn_provider_set_string(provider, "DefaultRoute", "false")
, где:
provider
— структураvpn_provider *provider
;DefaultRoute
— ключ типа string;false
— значение.
По умолчанию значение DefaultRoute
не задано, поскольку предполагается,
что VPN должен быть установлен как маршрут по умолчанию.
В случае успеха возвращается значение 0.
Поле .connect
содержит ссылку на функцию:
int connect(struct vpn_provider *provider, struct connman_task *task,
const char *if_name, vpn_provider_connect_cb_t cb,
const char *dbus_sender, void *user_data)
Данная функция предназначена для установки VPN-подключения, она устанавливает параметры для исполнения бинарных файлов.
В случае успеха возвращается значение 0.
Поле .disconnect
содержит ссылку на функцию:
void disconnect(struct vpn_provider *provider)
Данная функция предназначена для отключения VPN-соединения.
Поле .error_code
содержит ссылку на функцию:
int error_code(struct vpn_provider *provider, int exit_code)
Данная функция предназначена для обработки ошибок и вызывается при некорректной работе плагина.
В случае успеха возвращается значение 0.
Поле .save
содержит ссылку на функцию:
int save(struct vpn_provider *provider, GKeyFile *keyfile)
Данная функция вызывается при сохранении конфигурационного файла плагина.
В случае успеха возвращается значение 0.
Поле .device_flags
содержит ссылку на функцию:
int device_flags(struct vpn_provider *provider)
Данная функция возвращает значение флага устройств, поддерживаемых плагином
(IFF_TUN/IFF_TAP
).
В случае успеха возвращается флаги (>0).
Поле .route_env_parse
содержит ссылку на функцию:
route_env_parse(struct vpn_provider *provider, const char *key, int *family,
unsigned long *idx, enum vpn_provider_route_type *type)`
Данная функция анализирует ключ среды и устанавливает соответствующие значения для provider
,
key
, family
, idx
и type
.
В случае успеха возвращается значение 0.
Описание функций
int vpn_register(const char *name, const struct vpn_driver *driver,
const char *program);
Данная функция используется для инициализации VPN-плагина. Аргументы функции:
name
— наименование плагина;driver
— структура vpn_driver, в которую добавляются указатели на функции;program
— путь к исполняемому бинарному файлу VPN-приложения.
Функция обычно вызывается в момент регистрации ConnMan-плагина.
void vpn_unregister(const char *provider_name);
Функция предназначена для отключения VPN-плагина из списка поддерживаемых. Обычно вызывается в рамках метода дерегистрации VPN-плагина.
void vpn_died(struct connman_task *task, int exit_code, void *user_data);
Данный метод оповещает ConnMan о том, что VPN-приложение аварийно завершило свою работу.
int vpn_set_ifname(struct vpn_provider *provider, const char *ifname);
Метод оповещает ConnMan, что указанный сетевой интерфейс связан с указанным VPN-провайдером.