Документация
ОС Аврора 5.1.5

VPN-плагины ConnMan

VPN-плагины ConnMan предназначены для реализации взаимодействия между ConnMan и приложением, осуществляющим установление и остановку VPN-соединений.

Подключение: #include <connman/vpn/plugins/vpn.h>

Перечисления

Структуры

Функции

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

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.