add a callback to allow plugins to fetch values from the running config
This commit is contained in:
parent
4deca21d7b
commit
72346a7226
10 changed files with 60 additions and 25 deletions
3
Changes
3
Changes
|
|
@ -1,7 +1,8 @@
|
|||
? Brendan O'Dea <bod@optusnet.com.au> 2.0.5
|
||||
* Tue Nov 9 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.5
|
||||
- Handle routing properly in lone-master case
|
||||
- Fix intercepts: don't double-snoop throttled customers, ensure
|
||||
byte/packet counts are only updated once
|
||||
- Add a callback to allow plugins to fetch values from the running config
|
||||
|
||||
* Mon Nov 8 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.4
|
||||
- Added setrxspeed plugin
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
/* set up intercept based on RADIUS reply */
|
||||
|
||||
char const *cvs_id = "$Id: autosnoop.c,v 1.6 2004/11/09 06:02:37 bodea Exp $";
|
||||
char const *cvs_id = "$Id: autosnoop.c,v 1.7 2004/11/09 08:05:02 bodea Exp $";
|
||||
|
||||
int __plugin_api_version = 1;
|
||||
int __plugin_api_version = PLUGIN_API_VERSION;
|
||||
struct pluginfuncs *p;
|
||||
|
||||
int plugin_radius_response(struct param_radius_response *data)
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
/* set up throttling based on RADIUS reply */
|
||||
|
||||
char const *cvs_id = "$Id: autothrottle.c,v 1.7 2004/11/05 04:55:26 bodea Exp $";
|
||||
char const *cvs_id = "$Id: autothrottle.c,v 1.8 2004/11/09 08:05:02 bodea Exp $";
|
||||
|
||||
int __plugin_api_version = 1;
|
||||
int __plugin_api_version = PLUGIN_API_VERSION;
|
||||
struct pluginfuncs *p;
|
||||
|
||||
#define THROTTLE_KEY "lcp:interface-config"
|
||||
|
|
@ -64,8 +64,18 @@ int plugin_radius_response(struct param_radius_response *data)
|
|||
{
|
||||
if (strcmp(data->value, "yes") == 0)
|
||||
{
|
||||
p->log(3, 0, p->get_id_by_session(data->s), data->s->tunnel, " Throttling user\n");
|
||||
data->s->throttle_in = data->s->throttle_out = config->rl_rate;
|
||||
unsigned long *rate = p->getconfig("throttle_speed", UNSIGNED_LONG);
|
||||
if (rate)
|
||||
{
|
||||
if (*rate)
|
||||
p->log(3, 0, p->get_id_by_session(data->s), data->s->tunnel, " Throttling user to %dkb/s\n", *rate);
|
||||
else
|
||||
p->log(3, 0, p->get_id_by_session(data->s), data->s->tunnel, " Not throttling user (throttle_speed=0)\n");
|
||||
|
||||
data->s->throttle_in = data->s->throttle_out = *rate;
|
||||
}
|
||||
else
|
||||
p->log(1, 0, p->get_id_by_session(data->s), data->s->tunnel, "Not throttling user (can't get throttle_speed)\n");
|
||||
}
|
||||
else if (strcmp(data->value, "no") == 0)
|
||||
{
|
||||
|
|
|
|||
4
garden.c
4
garden.c
|
|
@ -9,9 +9,9 @@
|
|||
|
||||
/* walled garden */
|
||||
|
||||
char const *cvs_id = "$Id: garden.c,v 1.11 2004/11/05 04:55:27 bodea Exp $";
|
||||
char const *cvs_id = "$Id: garden.c,v 1.12 2004/11/09 08:05:02 bodea Exp $";
|
||||
|
||||
int __plugin_api_version = 1;
|
||||
int __plugin_api_version = PLUGIN_API_VERSION;
|
||||
static struct pluginfuncs *p = 0;
|
||||
|
||||
static int iam_master = 0; // We're all slaves! Slaves I tell you!
|
||||
|
|
|
|||
27
l2tpns.c
27
l2tpns.c
|
|
@ -4,7 +4,7 @@
|
|||
// Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
|
||||
// vim: sw=8 ts=8
|
||||
|
||||
char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.46 2004/11/09 05:42:53 bodea Exp $";
|
||||
char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.47 2004/11/09 08:05:02 bodea Exp $";
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include <assert.h>
|
||||
|
|
@ -3469,6 +3469,7 @@ void update_config()
|
|||
{
|
||||
if (strcmp(config->plugins[i], config->old_plugins[i]) == 0)
|
||||
continue;
|
||||
|
||||
if (*config->plugins[i])
|
||||
{
|
||||
// Plugin added
|
||||
|
|
@ -3761,6 +3762,29 @@ static void *open_plugin(char *plugin_name, int load)
|
|||
return dlopen(path, RTLD_NOW);
|
||||
}
|
||||
|
||||
// plugin callback to get a config value
|
||||
static void *getconfig(char *key, enum config_typet type)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; config_values[i].key; i++)
|
||||
{
|
||||
if (!strcmp(config_values[i].key, key))
|
||||
{
|
||||
if (config_values[i].type == type)
|
||||
return ((void *) config) + config_values[i].offset;
|
||||
|
||||
LOG(1, 0, 0, 0, "plugin requested config item \"%s\" expecting type %d, have type %d\n",
|
||||
key, type, config_values[i].type);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
LOG(1, 0, 0, 0, "plugin requested unknown config item \"%s\"\n", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void add_plugin(char *plugin_name)
|
||||
{
|
||||
static struct pluginfuncs funcs = {
|
||||
|
|
@ -3773,6 +3797,7 @@ void add_plugin(char *plugin_name)
|
|||
sessionkill,
|
||||
radiusnew,
|
||||
radiussend,
|
||||
getconfig,
|
||||
};
|
||||
|
||||
void *p = open_plugin(plugin_name, 1);
|
||||
|
|
|
|||
5
l2tpns.h
5
l2tpns.h
|
|
@ -1,5 +1,5 @@
|
|||
// L2TPNS Global Stuff
|
||||
// $Id: l2tpns.h,v 1.30 2004/11/05 04:55:27 bodea Exp $
|
||||
// $Id: l2tpns.h,v 1.31 2004/11/09 08:05:02 bodea Exp $
|
||||
|
||||
#ifndef __L2TPNS_H__
|
||||
#define __L2TPNS_H__
|
||||
|
|
@ -466,12 +466,13 @@ struct configt
|
|||
#endif
|
||||
};
|
||||
|
||||
enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IP, MAC };
|
||||
struct config_descriptt
|
||||
{
|
||||
char *key;
|
||||
int offset;
|
||||
int size;
|
||||
enum { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IP, MAC } type;
|
||||
enum config_typet type;
|
||||
};
|
||||
|
||||
// arp.c
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Summary: A high-speed clustered L2TP LNS
|
||||
Name: l2tpns
|
||||
Version: 2.0.4
|
||||
Version: 2.0.5
|
||||
Release: 1
|
||||
Copyright: GPL
|
||||
Group: System Environment/Daemons
|
||||
|
|
@ -41,8 +41,11 @@ rm -rf %{buildroot}
|
|||
%attr(755,root,root) /usr/lib/l2tpns
|
||||
|
||||
%changelog
|
||||
* Tue Nov 9 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.5
|
||||
- 2.0.5 release, see /usr/share/doc/l2tpns-2.0.5/Changes
|
||||
|
||||
* Mon Nov 8 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.4
|
||||
- 2.0.4 release, see /usr/share/doc/l2tpns-2.0.4/Changes
|
||||
- 2.0.4 release
|
||||
|
||||
* Wed Nov 3 2004 Brendan O'Dea <bod@optusnet.com.au> 2.0.3
|
||||
- 2.0.3 release
|
||||
|
|
|
|||
9
plugin.h
9
plugin.h
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef __PLUGIN_H__
|
||||
#define __PLUGIN_H__
|
||||
|
||||
#define PLUGIN_API_VERSION 1
|
||||
#define PLUGIN_API_VERSION 2
|
||||
#define MAX_PLUGIN_TYPES 30
|
||||
|
||||
enum
|
||||
|
|
@ -34,6 +34,7 @@ struct pluginfuncs
|
|||
void (*sessionkill)(sessionidt s, char *reason);
|
||||
u16 (*radiusnew)(sessionidt s);
|
||||
void (*radiussend)(u16 r, u8 state);
|
||||
void *(*getconfig)(char *key, enum config_typet type);
|
||||
};
|
||||
|
||||
struct param_pre_auth
|
||||
|
|
@ -76,12 +77,6 @@ struct param_timer
|
|||
time_t time_now;
|
||||
};
|
||||
|
||||
struct param_config
|
||||
{
|
||||
char *key;
|
||||
char *value;
|
||||
};
|
||||
|
||||
struct param_control
|
||||
{
|
||||
char *buf;
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
/* fudge up session rx speed if not set */
|
||||
|
||||
char const *cvs_id = "$Id: setrxspeed.c,v 1.1 2004/11/05 02:38:59 bodea Exp $";
|
||||
char const *cvs_id = "$Id: setrxspeed.c,v 1.2 2004/11/09 08:05:03 bodea Exp $";
|
||||
|
||||
int __plugin_api_version = 1;
|
||||
int __plugin_api_version = PLUGIN_API_VERSION;
|
||||
static struct pluginfuncs *p = 0;
|
||||
|
||||
int plugin_post_auth(struct param_post_auth *data)
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
/* strip domain part of username before sending RADIUS requests */
|
||||
|
||||
char const *cvs_id = "$Id: stripdomain.c,v 1.4 2004/11/05 04:55:27 bodea Exp $";
|
||||
char const *cvs_id = "$Id: stripdomain.c,v 1.5 2004/11/09 08:05:03 bodea Exp $";
|
||||
|
||||
int __plugin_api_version = 1;
|
||||
int __plugin_api_version = PLUGIN_API_VERSION;
|
||||
static struct pluginfuncs *p = 0;
|
||||
|
||||
int plugin_pre_auth(struct param_pre_auth *data)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue