2 * Copyright (C) 2008 Martin Willi
3 * Hochschule fuer Technik Rapperswil
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>.
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
18 #include "load_tester_config.h"
22 typedef struct private_load_tester_config_t private_load_tester_config_t
;
25 * Private data of an load_tester_config_t object
27 struct private_load_tester_config_t
{
32 load_tester_config_t
public;
41 * Implementation of backend_t.create_peer_cfg_enumerator.
43 static enumerator_t
* create_peer_cfg_enumerator(private_load_tester_config_t
*this,
45 identification_t
*other
)
47 return enumerator_create_single(this->peer_cfg
, NULL
);
51 * Implementation of backend_t.create_ike_cfg_enumerator.
53 static enumerator_t
* create_ike_cfg_enumerator(private_load_tester_config_t
*this,
54 host_t
*me
, host_t
*other
)
58 ike_cfg
= this->peer_cfg
->get_ike_cfg(this->peer_cfg
);
59 return enumerator_create_single(ike_cfg
, NULL
);
63 * implements backend_t.get_peer_cfg_by_name.
65 static peer_cfg_t
*get_peer_cfg_by_name(private_load_tester_config_t
*this,
68 if (streq(name
, "load-test"))
70 return this->peer_cfg
->get_ref(this->peer_cfg
);
76 * Implementation of load_tester_config_t.destroy.
78 static void destroy(private_load_tester_config_t
*this)
80 this->peer_cfg
->destroy(this->peer_cfg
);
85 * Described in header.
87 load_tester_config_t
*load_tester_config_create()
89 private_load_tester_config_t
*this = malloc_thing(private_load_tester_config_t
);
91 child_cfg_t
*child_cfg
;
93 traffic_selector_t
*ts
;
96 char *remote
, *pool
, *authstr
;
99 this->public.backend
.create_peer_cfg_enumerator
= (enumerator_t
*(*)(backend_t
*, identification_t
*me
, identification_t
*other
))create_peer_cfg_enumerator
;
100 this->public.backend
.create_ike_cfg_enumerator
= (enumerator_t
*(*)(backend_t
*, host_t
*me
, host_t
*other
))create_ike_cfg_enumerator
;
101 this->public.backend
.get_peer_cfg_by_name
= (peer_cfg_t
* (*)(backend_t
*,char*))get_peer_cfg_by_name
;
102 this->public.destroy
= (void(*)(load_tester_config_t
*))destroy
;
104 if (lib
->settings
->get_bool(lib
->settings
,
105 "charon.plugins.load_tester.request_virtual_ip", FALSE
))
107 vip
= host_create_from_string("0.0.0.0", 0);
109 pool
= lib
->settings
->get_str(lib
->settings
,
110 "charon.plugins.load_tester.pool", NULL
);
111 remote
= lib
->settings
->get_str(lib
->settings
,
112 "charon.plugins.load_tester.remote", "127.0.0.1");
113 ike_cfg
= ike_cfg_create(TRUE
, FALSE
, "0.0.0.0", remote
);
114 proposal
= proposal_create_from_string(PROTO_IKE
,
115 lib
->settings
->get_str(lib
->settings
,
116 "charon.plugins.load_tester.proposal", "aes128-sha1-modp768"));
119 proposal
= proposal_create_from_string(PROTO_IKE
, "aes128-sha1-modp768");
121 ike_cfg
->add_proposal(ike_cfg
, proposal
);
122 this->peer_cfg
= peer_cfg_create("load-test", 2, ike_cfg
,
123 identification_create_from_string("load-test@strongswan.org"),
124 identification_create_from_string("load-test@strongswan.org"),
125 CERT_SEND_IF_ASKED
, UNIQUE_NO
, 1, 0, 0, /* keytries, rekey, reauth */
126 0, 0, TRUE
, 60, /* jitter, overtime, mobike, dpddelay */
127 vip
, pool
, FALSE
, NULL
, NULL
);
128 auth
= this->peer_cfg
->get_auth(this->peer_cfg
);
129 authstr
= lib
->settings
->get_str(lib
->settings
,
130 "charon.plugins.load_tester.auth", "pubkey");
131 if (streq(authstr
, "psk"))
133 class = AUTH_CLASS_PSK
;
137 class = AUTH_CLASS_PUBKEY
;
139 auth
->add_item(auth
, AUTHN_AUTH_CLASS
, &class);
140 child_cfg
= child_cfg_create("load-test", 600, 400, 100, NULL
, TRUE
,
141 MODE_TUNNEL
, ACTION_NONE
, ACTION_NONE
, FALSE
);
142 proposal
= proposal_create_from_string(PROTO_ESP
, "aes128-sha1");
143 child_cfg
->add_proposal(child_cfg
, proposal
);
144 ts
= traffic_selector_create_dynamic(0, 0, 65535);
145 child_cfg
->add_traffic_selector(child_cfg
, TRUE
, ts
);
146 ts
= traffic_selector_create_dynamic(0, 0, 65535);
147 child_cfg
->add_traffic_selector(child_cfg
, FALSE
, ts
);
148 this->peer_cfg
->add_child_cfg(this->peer_cfg
, child_cfg
);
150 return &this->public;