control.o \
util.o \
-PLUGINS=garden.so
+PLUGINS=garden.so autothrottle.so autosnoop.so
all: l2tpns cluster_master nsctl $(PLUGINS)
--- /dev/null
+#include <string.h>
+#include <malloc.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include "l2tpns.h"
+#include "plugin.h"
+#include "control.h"
+
+int __plugin_api_version = 1;
+struct pluginfuncs p;
+
+int plugin_radius_response(struct param_radius_response *data)
+{
+ if (strcmp(data->key, "intercept") == 0)
+ {
+ if (strcmp(data->value, "yes") == 0)
+ {
+ p.log(3, 0, 0, 0, " Intercepting user\n");
+ data->s->snoop = 1;
+ }
+ else if (strcmp(data->value, "no") == 0)
+ {
+ p.log(3, 0, 0, 0, " Not intercepting user\n");
+ data->s->snoop = 0;
+ }
+ }
+ return PLUGIN_RET_OK;
+}
+
+int plugin_init(struct pluginfuncs *funcs)
+{
+ if (!funcs) return 0;
+ memcpy(&p, funcs, sizeof(p));
+
+ return 1;
+}
+
+void plugin_done()
+{
+}
+
--- /dev/null
+#include <string.h>
+#include <malloc.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include "l2tpns.h"
+#include "plugin.h"
+#include "control.h"
+
+int __plugin_api_version = 1;
+struct pluginfuncs p;
+
+int plugin_radius_response(struct param_radius_response *data)
+{
+ if (strcmp(data->key, "throttle") == 0)
+ {
+ if (strcmp(data->value, "yes") == 0)
+ {
+ p.log(3, 0, 0, 0, " Throttling user\n");
+ data->s->throttle = 1;
+ }
+ else if (strcmp(data->value, "no") == 0)
+ {
+ p.log(3, 0, 0, 0, " Not throttling user\n");
+ data->s->throttle = 0;
+ }
+ }
+ return PLUGIN_RET_OK;
+}
+
+int plugin_init(struct pluginfuncs *funcs)
+{
+ if (!funcs) return 0;
+ memcpy(&p, funcs, sizeof(p));
+
+ return 1;
+}
+
+void plugin_done()
+{
+}
+
set setuid 0
set dump_speed no
load plugin "garden"
+load plugin "autothrottle"
+load plugin "autosnoop"