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-провайдером.