Annotation of embedaddon/strongswan/src/libcharon/plugins/kernel_netlink/kernel_netlink_plugin.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2008 Tobias Brunner
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16:
! 17: #include "kernel_netlink_plugin.h"
! 18:
! 19: #include "kernel_netlink_ipsec.h"
! 20: #include "kernel_netlink_net.h"
! 21:
! 22: #include <sa/task_manager.h>
! 23:
! 24: typedef struct private_kernel_netlink_plugin_t private_kernel_netlink_plugin_t;
! 25:
! 26: /**
! 27: * private data of kernel netlink plugin
! 28: */
! 29: struct private_kernel_netlink_plugin_t {
! 30: /**
! 31: * implements plugin interface
! 32: */
! 33: kernel_netlink_plugin_t public;
! 34: };
! 35:
! 36: METHOD(plugin_t, get_name, char*,
! 37: private_kernel_netlink_plugin_t *this)
! 38: {
! 39: return "kernel-netlink";
! 40: }
! 41:
! 42: METHOD(plugin_t, get_features, int,
! 43: private_kernel_netlink_plugin_t *this, plugin_feature_t *features[])
! 44: {
! 45: static plugin_feature_t f[] = {
! 46: PLUGIN_CALLBACK(kernel_ipsec_register, kernel_netlink_ipsec_create),
! 47: PLUGIN_PROVIDE(CUSTOM, "kernel-ipsec"),
! 48: PLUGIN_CALLBACK(kernel_net_register, kernel_netlink_net_create),
! 49: PLUGIN_PROVIDE(CUSTOM, "kernel-net"),
! 50: };
! 51: *features = f;
! 52: return countof(f);
! 53: }
! 54:
! 55: METHOD(plugin_t, reload, bool,
! 56: private_kernel_netlink_plugin_t *this)
! 57: {
! 58: u_int timeout;
! 59: FILE *f;
! 60:
! 61: f = fopen("/proc/sys/net/core/xfrm_acq_expires", "w");
! 62: if (f)
! 63: {
! 64: timeout = lib->settings->get_int(lib->settings,
! 65: "%s.plugins.kernel-netlink.xfrm_acq_expires",
! 66: task_manager_total_retransmit_timeout(), lib->ns);
! 67: fprintf(f, "%u", timeout);
! 68: fclose(f);
! 69: }
! 70: return TRUE;
! 71: }
! 72:
! 73: METHOD(plugin_t, destroy, void,
! 74: private_kernel_netlink_plugin_t *this)
! 75: {
! 76: free(this);
! 77: }
! 78:
! 79: /*
! 80: * see header file
! 81: */
! 82: plugin_t *kernel_netlink_plugin_create()
! 83: {
! 84: private_kernel_netlink_plugin_t *this;
! 85:
! 86: if (!lib->caps->keep(lib->caps, CAP_NET_ADMIN))
! 87: { /* required to bind/use XFRM sockets / create/modify routing tables, but
! 88: * not if only the read-only parts of kernel-netlink-net are used, so
! 89: * we don't fail here */
! 90: DBG1(DBG_KNL, "kernel-netlink plugin might require CAP_NET_ADMIN "
! 91: "capability");
! 92: }
! 93:
! 94: INIT(this,
! 95: .public = {
! 96: .plugin = {
! 97: .get_name = _get_name,
! 98: .get_features = _get_features,
! 99: .reload = _reload,
! 100: .destroy = _destroy,
! 101: },
! 102: },
! 103: );
! 104:
! 105: reload(this);
! 106:
! 107: return &this->public.plugin;
! 108: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>