Add serviceclass config
authorNeutron Soutmun <neo.neutron@gmail.com>
Sat, 3 Jul 2010 15:44:35 +0000 (22:44 +0700)
committerNeutron Soutmun <neo.neutron@gmail.com>
Sat, 3 Jul 2010 15:44:35 +0000 (22:44 +0700)
17 files changed:
configure.ac
data/rahunas.db
example/Makefile.am
example/rahunas-vserver.conf.in
src/Makefile.am
src/rahunasd.h
src/rh-config.c
src/rh-config.h
src/rh-server.c
src/rh-server.h
src/rh-task-ipset.c
src/rh-task-iptables.c
src/rh-task-vipmap.c [deleted file]
src/rh-task-vipmap.h [deleted file]
src/rh-task.c
src/rh-task.h
src/rh-xmlrpc-server.c

index ef235c7..2fadb61 100644 (file)
@@ -68,6 +68,7 @@ AC_CONFIG_FILES([
   example/rahunas.init
   example/rahunas.conf
   example/rahunas-vserver.conf
+  example/rahunas-serviceclass.conf
 ])
 
 AC_OUTPUT
index 5015996..1df2862 100644 (file)
Binary files a/data/rahunas.db and b/data/rahunas.db differ
index e32cc14..d0d6754 100644 (file)
@@ -1,3 +1,4 @@
 MAINTAINERCLEANFILES = Makefile.in
 
-EXTRA_DIST = rahunas.conf rahunas.default rahunas.init rahunas-vserver.conf
+EXTRA_DIST = rahunas.conf rahunas.default rahunas.init rahunas-vserver.conf \
+             rahunas-serviceclass.conf
index 67faded..9dd4411 100644 (file)
@@ -33,9 +33,4 @@ rahunas_default = {
   nas_default_redirect = "http://www.rahunas.org"
   nas_default_language = "Thai"
   nas_weblogin_template = "rahunas"
-
-  vipmap = "no"
-  vipmap_attribute = ""
-  vipmap_network = ""
-  vipmap_fake_arp = "no"
 }
index 7f06678..c069b7b 100644 (file)
@@ -17,8 +17,7 @@ AM_CFLAGS = \
   -DRAHUNAS_LOG_DIR=\"$(localstatedir)/log/rahunas/\" \
   -DRAHUNAS_RUN_DIR=\"$(localstatedir)/run/\" \
   -DRAHUNAS_FIREWALL_WRAPPER=\"$(sbindir)/rahunas-firewall\" \
-  -DRAHUNAS_BANDWIDTH_WRAPPER=\"$(sbindir)/rahunas-bandwidth\" \
-  -DRAHUNAS_VIPMAP_WRAPPER=\"$(sbindir)/rahunas-vipmap\"
+  -DRAHUNAS_BANDWIDTH_WRAPPER=\"$(sbindir)/rahunas-bandwidth\"
 
 rahunasd_SOURCES = \
   rahunasd.c \
@@ -45,8 +44,6 @@ rahunasd_SOURCES = \
   rh-task-dbset.h \
   rh-task-bandwidth.c \
   rh-task-bandwidth.h \
-  rh-task-vipmap.c \
-  rh-task-vipmap.h \
   rh-radius.h \
   rh-config.c \
   rh-config.h
index 9e0ef0c..8582304 100644 (file)
@@ -61,7 +61,6 @@ struct rahunas_member {
   char *username;
   char *session_id;
   unsigned char mac_address[ETH_ALEN];
-  char *vip_ip;
 };
 
 void rh_free_member(struct rahunas_member *member);
index da0a186..199fba2 100755 (executable)
@@ -25,6 +25,7 @@ enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size,
   char *main_key = NULL;
   char *sub_key = NULL;
   enum config_type cfg_type;
+  int  valid = 1;
 
   if(config == NULL)
     return lcfg_status_error;
@@ -43,6 +44,9 @@ enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size,
 
   if (strncmp(main_key, "main", 4) == 0) {
     cfg_type = MAIN;
+
+  } if (strncmp(main_key, "service_class", strlen ("service_class")) == 0) {
+    cfg_type = SERVICECLASS;
   } else {
     cfg_type = VSERVER;
     if (config->rh_vserver.vserver_name == NULL)
@@ -77,6 +81,75 @@ enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size,
       }      
       break;
 
+    case SERVICECLASS:
+      if (strncmp (sub_key, "name", strlen("name")) == 0) {
+        if (config->rh_serviceclass.name != NULL)
+          free(config->rh_serviceclass.name);
+        config->rh_serviceclass.name = strdup(value);
+      } else if (strncmp (sub_key, "description", strlen("description")) == 0) {
+        if (config->rh_serviceclass.description != NULL)
+          free(config->rh_serviceclass.description);
+        config->rh_serviceclass.description = strdup(value);
+      } else if (strncmp (sub_key, "network", strlen("network")) == 0) {
+        if ((sep = strchr (value, '/')) != NULL) {
+          if (config->rh_serviceclass.network != NULL)
+            free(config->rh_serviceclass.network);
+
+          config->rh_serviceclass.network = strdup(value);
+
+          sep++;
+          config->rh_serviceclass.network_size = atoi (sep);
+
+          if (config->rh_serviceclass.network_size != 0) {
+            config->rh_serviceclass.network_size =
+              (1 << (32 - config->rh_serviceclass.network_size)) - 2;
+          }
+
+          sep = strsep (&value, "/");
+          if (sep != NULL) {
+            if (inet_aton (sep, &config->rh_serviceclass.start_addr) == 0)
+              {
+                valid = 0;
+              }
+            else
+              {
+                // Start address should not be the network address
+                config->rh_serviceclass.start_addr.s_addr += 1;
+                DP ("service_class: %s - start ip = %s, size: %d",
+                    config->rh_serviceclass.name,
+                    inet_ntoa (config->rh_serviceclass.start_addr),
+                    config->rh_serviceclass.network_size);
+              }
+          } else {
+            config->rh_serviceclass.network_size = 0;
+            valid = 0;
+          }
+        } else {
+          valid = 0;
+        }
+
+        if (!valid) {
+          if (config->rh_serviceclass.name != NULL) {
+            syslog(LOG_ERR, "\"%s\" service_class config config error: "
+                            "invalid network %s",
+                            config->rh_serviceclass.name, value);
+          } else {
+            syslog(LOG_ERR, "unknown service_class config error: "
+                            "invalid network %s", value);
+          }
+        }
+      } else if (strncmp (sub_key, "fake_arpd", strlen("fake_arpd")) == 0) {
+        if (config->rh_serviceclass.fake_arpd != NULL)
+          free(config->rh_serviceclass.fake_arpd);
+        config->rh_serviceclass.fake_arpd = strdup(value);
+      } else if (strncmp (sub_key, "fake_arpd_iface",
+                 strlen("fake_arpd_iface")) == 0) {
+        if (config->rh_serviceclass.fake_arpd_iface != NULL)
+          free(config->rh_serviceclass.fake_arpd_iface);
+        config->rh_serviceclass.fake_arpd_iface = strdup(value);
+      }
+      break;
+
     case VSERVER:
       if (strncmp(sub_key, "vserver_id", 10) == 0) {
         config->rh_vserver.vserver_id = atoi(value);
@@ -214,32 +287,6 @@ enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size,
         if (config->rh_vserver.nas_weblogin_template != NULL)
           free(config->rh_vserver.nas_weblogin_template);
         config->rh_vserver.nas_weblogin_template = strdup(value);
-      } else if (strncmp(sub_key, "vipmap_attribute",
-                 strlen("vipmap_attribute")) == 0) {
-        if (config->rh_vserver.vipmap_attribute != NULL)
-          free(config->rh_vserver.vipmap_attribute);
-        config->rh_vserver.vipmap_attribute = strdup(value);
-      } else if (strncmp(sub_key, "vipmap_network",
-                 strlen("vipmap_network")) == 0) {
-        if (config->rh_vserver.vipmap_network != NULL)
-          free(config->rh_vserver.vipmap_network);
-        config->rh_vserver.vipmap_network = strdup(value);
-      } else if (strncmp(sub_key, "vipmap_fake_arp",
-                 strlen("vipmap_fake_arp")) == 0) {
-        if (config->rh_vserver.vipmap_fake_arp != NULL)
-          free(config->rh_vserver.vipmap_fake_arp);
-        config->rh_vserver.vipmap_fake_arp = strdup(value);
-      } else if (strncmp(sub_key, "vipmap", strlen("vipmap")) == 0) {
-        if (config->rh_vserver.vipmap != NULL)
-          free(config->rh_vserver.vipmap);
-        config->rh_vserver.vipmap = strdup(value);
-
-        if (strncmp(config->rh_vserver.vipmap, "yes", strlen("yes")) == 0) {
-          config->rh_vserver.vipmap_enable = 1;
-
-          config->rh_vserver.vserver_vip_name =
-            g_strdup_printf ("%s-vip", config->rh_vserver.vserver_name);
-        }
       }
       break;
   }
@@ -362,10 +409,17 @@ int cleanup_vserver_config(struct rahunas_vserver_config *config)
   rh_free(&(config->nas_default_redirect));
   rh_free(&(config->nas_default_language));
   rh_free(&(config->nas_weblogin_template));
-  rh_free(&(config->vipmap));
-  rh_free(&(config->vipmap_attribute));
-  rh_free(&(config->vipmap_network));
-  rh_free(&(config->vipmap_fake_arp));
+
+  return 0;
+}
+
+int cleanup_serviceclass_config(struct rahunas_serviceclass_config *config)
+{
+  rh_free(&(config->name));
+  rh_free(&(config->description));
+  rh_free(&(config->network));
+  rh_free(&(config->fake_arpd));
+  rh_free(&(config->fake_arpd_iface));
 
   return 0;
 }
index b8b09a8..fe1bd06 100644 (file)
@@ -40,11 +40,11 @@ struct rahunas_main_config {
   int  bittorrent_download_max;
   int  bittorrent_upload_max;
   int  polling_interval;
+  int  service_class_enabled;
 };
 
 struct rahunas_vserver_config {
   char *vserver_name;
-  char *vserver_vip_name;
   int  vserver_id;
   int  init_flag;
   char *dev_external;
@@ -81,21 +81,28 @@ struct rahunas_vserver_config {
   char *nas_default_redirect;
   char *nas_default_language;
   char *nas_weblogin_template;
-  char *vipmap;
-  char *vipmap_attribute;
-  char *vipmap_network;
-  char *vipmap_fake_arp;
-  int  vipmap_enable;
+};
+
+struct rahunas_serviceclass_config {
+  char *name;
+  char *description;
+  char *network;
+  struct in_addr start_addr;
+  uint32_t network_size;
+  char *fake_arpd;
+  char *fake_arpd_iface;
 };
 
 union rahunas_config {
   struct rahunas_main_config rh_main;
   struct rahunas_vserver_config rh_vserver;
+  struct rahunas_serviceclass_config rh_serviceclass;
 };
 
 enum config_type {
   MAIN,
-  VSERVER
+  VSERVER,
+  SERVICECLASS
 };
 
 enum vserver_config_init_flag {
@@ -112,6 +119,7 @@ int get_config(const char *cfg_file, union rahunas_config *config);
 int get_value(const char *cfg_file, const char *key, void **data, size_t *len);
 int get_vservers_config(const char *conf_dir, struct main_server *server);
 int cleanup_vserver_config(struct rahunas_vserver_config *config);
+int cleanup_serviceclass_config(struct rahunas_serviceclass_config *config);
 int cleanup_mainserver_config(struct rahunas_main_config *config);
 enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size, 
                                  void *user_data);
index 8547265..dea93ea 100644 (file)
@@ -116,11 +116,6 @@ int register_vserver(struct main_server *ms, const char *vserver_cfg_file)
     .rh_vserver.nas_default_redirect = NULL,
     .rh_vserver.nas_default_language = NULL,
     .rh_vserver.nas_weblogin_template = NULL,
-    .rh_vserver.vipmap = NULL,
-    .rh_vserver.vipmap_attribute = NULL,
-    .rh_vserver.vipmap_network = NULL,
-    .rh_vserver.vipmap_fake_arp = NULL,
-    .rh_vserver.vipmap_enable = 0,
   };
 
   cfg_file = fopen(vserver_cfg_file, "r");
index 2cdf2b1..af86e2d 100644 (file)
@@ -14,7 +14,6 @@ struct vserver {
   struct rahunas_vserver_config *dummy_config;
   struct rahunas_map *v_map;
   struct set *v_set;
-  struct set *v_vip_set;
 };
 
 struct main_server {
index 0da9165..a19286e 100644 (file)
@@ -66,10 +66,6 @@ static void init (struct vserver *vs)
 
   vs->v_set = set_adt_get(vs->vserver_config->vserver_name);
 
-  if (vs->vserver_config->vipmap_enable) {
-    vs->v_vip_set = set_adt_get(vs->vserver_config->vserver_vip_name);
-  }
-
   logmsg(RH_LOG_NORMAL, "[%s] Task IPSET initialize..",
          vs->vserver_config->vserver_name);  
 
@@ -79,10 +75,6 @@ static void init (struct vserver *vs)
 
   /* Ensure the set is empty */
   set_flush(vs->vserver_config->vserver_name);
-
-  if (vs->vserver_config->vipmap_enable) {
-    set_flush(vs->vserver_config->vserver_vip_name);
-  }
 }
 
 /* Cleanup */
@@ -98,13 +90,7 @@ static void cleanup (struct vserver *vs)
 
   set_flush(vs->vserver_config->vserver_name);
 
-  if (vs->vserver_config->vserver_vip_name != NULL)
-    set_flush(vs->vserver_config->vserver_vip_name);
-
   rh_free(&(vs->v_set));
-
-  if (vs->v_vip_set != NULL)
-    rh_free(&(vs->v_vip_set));
 }
 
 /* Start session task */
@@ -116,12 +102,6 @@ static int startsess (struct vserver *vs, struct task_req *req)
 
   res = set_adtip_nb(vs->v_set, &ip, req->mac_address, IP_SET_OP_ADD_IP);
 
-  if (vs->vserver_config->vipmap_enable && req->vip_user)
-    {
-      res = set_adtip_nb(vs->v_vip_set, &ip, req->mac_address,
-                         IP_SET_OP_ADD_IP);
-    }
-
   return res;
 }
 
@@ -134,12 +114,6 @@ static int stopsess  (struct vserver *vs, struct task_req *req)
 
   res = set_adtip_nb(vs->v_set, &ip, req->mac_address, IP_SET_OP_DEL_IP);
 
-  if (vs->vserver_config->vipmap_enable && req->vip_user)
-    {
-      res = set_adtip_nb(vs->v_vip_set, &ip, req->mac_address,
-                         IP_SET_OP_DEL_IP);
-    }
-
   return res;
 }
 
index 3920c48..1262a6b 100644 (file)
@@ -27,7 +27,7 @@ int iptables_exec(struct vserver *vs, char *const args[])
   int ret = 0;
   int fd = 0;
   int i = 0;
-  char *env[25];
+  char *env[22];
 
   env[0]  = g_strdup("ENV_OVERRIDE=yes");
   env[1]  = g_strdup_printf("SETNAME=%s", vs->vserver_config->vserver_name);
@@ -52,18 +52,12 @@ int iptables_exec(struct vserver *vs, char *const args[])
                             vs->vserver_config->vserver_ports_allow);
   env[19] = g_strdup_printf("VSERVER_PORTS_INTERCEPT=%s", 
                             vs->vserver_config->vserver_ports_intercept);
-  env[20] = g_strdup_printf("VIPMAP=%s",
-                            vs->vserver_config->vipmap);
-  env[21] = g_strdup_printf("VIPMAP_NETWORK=%s",
-                            vs->vserver_config->vipmap_network);
-  env[22] = g_strdup_printf("VIPMAP_FAKE_ARP=%s",
-                            vs->vserver_config->vipmap_fake_arp);
-  env[23] = g_strdup_printf("KEEP_SET=%s",
+  env[20] = g_strdup_printf("KEEP_SET=%s",
                             vs->vserver_config->init_flag == VS_RELOAD ?
                             "yes" : "no");
-  env[24] = (char *) 0;
+  env[21] = (char *) 0;
 
-  for (i = 0; i < 23; i++) {
+  for (i = 0; i < sizeof (env); i++) {
     if (env[i] != NULL) 
       DP("%s", env[i]);
   }
diff --git a/src/rh-task-vipmap.c b/src/rh-task-vipmap.c
deleted file mode 100644 (file)
index 87eb5c3..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/**
- * RahuNAS task vipmap implementation 
- * Author: Neutron Soutmun <neo.neutron@gmail.com>
- * Date:   2010-05-11
- */
-
-#include <stdlib.h>
-#include <syslog.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <time.h>
-#include <string.h>
-#include <libgda/libgda.h>
-#include "rahunasd.h"
-#include "rh-task.h"
-#include "rh-task-vipmap.h"
-#include "rh-task-memset.h"
-#include "rh-ipset.h"
-#include "rh-utils.h"
-
-GList *vipmap = NULL;
-
-int vipmap_exec(struct vserver *vs, char *const args[])
-{
-  pid_t ws;
-  pid_t pid;
-  int status;
-  int exec_pipe[2];
-  char buffer[150];
-  char *endline = NULL;
-  int ret = 0;
-  int fd = 0;
-  
-  memset(buffer, '\0', sizeof(buffer));
-
-  if (pipe(exec_pipe) == -1) {
-    logmsg(RH_LOG_ERROR, "Error: pipe()");
-    return -1;
-  }
-  DP("pipe0=%d,pipe1=%d", exec_pipe[0], exec_pipe[1]);
-
-  pid = vfork();
-  dup2(exec_pipe[1], STDOUT_FILENO);
-
-  if (pid == 0) {
-    // Child
-    execv(RAHUNAS_VIPMAP_WRAPPER, args);
-  } else if (pid < 0) {
-    // Fork error
-    logmsg(RH_LOG_ERROR, "Error: vfork()"); 
-    ret = -1;
-  } else {
-    // Parent
-    ws = waitpid(pid, &status, 0);
-
-    DP("VIP map: Return (%d)", WEXITSTATUS(status));
-
-    // Return message log
-    DP("Read message");
-    read(exec_pipe[0], buffer, sizeof(buffer));
-
-    if (buffer != NULL) {
-      DP("Got message: %s", buffer);
-      endline = strstr(buffer, "\n");
-      if (endline != NULL) 
-        *endline = '\0';
-
-      if (vs != NULL) {
-        logmsg(RH_LOG_NORMAL, "[%s] VIP map: %s", 
-          vs->vserver_config->vserver_name, buffer);
-      } else {
-        logmsg(RH_LOG_NORMAL, "[main server] VIP map: %s", buffer);
-      }
-    }
-
-    if (WIFEXITED(status)) {
-      ret = WEXITSTATUS(status);
-    } else {
-      ret = -1;
-    } 
-  }
-
-  if ((buffer != NULL) && (strncmp (buffer, "NOT COMPLETED", 13) == 0))
-    ret = -2;  // Not complete need to retry
-
-  close(exec_pipe[0]);
-  close(exec_pipe[1]);
-  return ret;
-}
-
-int vipmap_add(struct vserver *vs, struct vipmap_req *req)
-{
-  char *args[6];
-
-  DP("VIP map: add");
-
-  args[0] = RAHUNAS_VIPMAP_WRAPPER;
-  args[1] = "add";
-  args[2] = vs->vserver_config->vserver_name; 
-  args[3] = req->ip;
-  args[4] = req->vip_ip;
-  args[5] = (char *) 0;
-
-  return vipmap_exec (vs, args);
-}
-
-int vipmap_del(struct vserver *vs, struct vipmap_req *req)
-{
-  char *args[6];
-
-  DP("VIP map: add");
-
-  args[0] = RAHUNAS_VIPMAP_WRAPPER;
-  args[1] = "del";
-  args[2] = vs->vserver_config->vserver_name; 
-  args[3] = req->ip;
-  args[4] = req->vip_ip;
-  args[5] = (char *) 0;
-
-  return vipmap_exec (vs, args);
-}
-
-
-/* Start service task */
-static int startservice ()
-{
-  /* Do nothing */
-  return 0;
-}
-
-/* Stop service task */
-static int stopservice  ()
-{
-  /* Do nothing */
-  return 0;
-}
-
-/* Initialize */
-static void init (struct vserver *vs)
-{
-  /* Do nothing */
-}
-
-/* Cleanup */
-static void cleanup (struct vserver *vs)
-{
-  /* Do nothing */
-}
-
-/* Start session task */
-static int startsess (struct vserver *vs, struct task_req *req)
-{
-  struct vipmap_req vip_req;
-  GList *member_node = NULL;
-  struct rahunas_member *member = NULL;
-
-  if (!req->vip_user)
-    return 0;
-
-  member_node = member_get_node_by_id(vs, req->id);
-  if (member_node == NULL)
-    return -1;
-
-  member = (struct rahunas_member *) member_node->data;
-
-  snprintf(vip_req.ip, sizeof (vip_req.ip), "%s", idtoip(vs->v_map, req->id));
-  snprintf(vip_req.vip_ip, sizeof (vip_req.vip_ip), "%s",
-           idtoip(vs->v_map, req->id));
-
-  vipmap_add(vs, &vip_req);
-  return 0;
-}
-
-/* Stop session task */
-static int stopsess (struct vserver *vs, struct task_req *req)
-{
-  struct vipmap_req vip_req;
-  GList *member_node = NULL;
-  struct rahunas_member *member = NULL;
-
-  if (!req->vip_user)
-    return 0;
-
-  member_node = member_get_node_by_id(vs, req->id);
-  if (member_node == NULL)
-    return -1;
-
-  member = (struct rahunas_member *) member_node->data;
-
-  snprintf(vip_req.ip, sizeof (vip_req.ip), "%s", idtoip(vs->v_map, req->id));
-  snprintf(vip_req.vip_ip, sizeof (vip_req.vip_ip), "%s",
-           idtoip(vs->v_map, req->id));
-
-  vipmap_del(vs, &vip_req);
-
-  return 0;
-}
-
-/* Commit start session task */
-static int commitstartsess (struct vserver *vs, struct task_req *req)
-{
-  /* Do nothing or need to implement */
-}
-
-/* Commit stop session task */
-static int commitstopsess  (struct vserver *vs, struct task_req *req)
-{
-  /* Do nothing or need to implement */
-}
-
-/* Rollback start session task */
-static int rollbackstartsess (struct vserver *vs, struct task_req *req)
-{
-  /* Do nothing or need to implement */
-}
-
-/* Rollback stop session task */
-static int rollbackstopsess  (struct vserver *vs, struct task_req *req)
-{
-  /* Do nothing or need to implement */
-}
-
-static struct task task_vipmap = {
-  .taskname = "VIPMAP",
-  .taskprio = 15,
-  .init = &init,
-  .cleanup = &cleanup,
-  .startservice = &startservice,
-  .stopservice = &stopservice,
-  .startsess = &startsess,
-  .stopsess = &stopsess,
-  .commitstartsess = &commitstartsess,
-  .commitstopsess = &commitstopsess,
-  .rollbackstartsess = &rollbackstartsess,
-  .rollbackstopsess = &rollbackstopsess,
-};
-
-void rh_task_vipmap_reg(struct main_server *ms) {
-  task_register(ms, &task_vipmap);
-}
diff --git a/src/rh-task-vipmap.h b/src/rh-task-vipmap.h
deleted file mode 100644 (file)
index edde247..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * RahuNAS task vipmap implementation 
- * Author: Neutron Soutmun <neo.neutron@gmail.com>
- * Date:   2010-05-11
- */
-#ifndef __RH_TASK_VIPMAP_H
-#define __RH_TASK_VIPMAP_H
-
-struct vipmap_req {
-  char ip[16];
-  char vip_ip[16];
-};
-
-extern void rh_task_vipmap_reg(struct main_server *ms);
-
-#endif // __RH_TASK_VIPMAP_H
-
index ed48cd7..37fb06a 100644 (file)
@@ -11,7 +11,6 @@
 #include "rh-task-ipset.h"
 #include "rh-task-dbset.h"
 #include "rh-task-bandwidth.h"
-#include "rh-task-vipmap.h"
 
 void task_register(struct main_server *ms, struct task *task)
 {
@@ -59,8 +58,6 @@ void rh_task_register(struct main_server *ms)
     if (ms->main_config->bandwidth_shape)
       rh_task_bandwidth_reg(ms);
 
-    rh_task_vipmap_reg(ms);
-
     rh_task_dbset_reg(ms);
     task_registered = 1;
   }
index ffbe22b..78f03eb 100644 (file)
@@ -23,8 +23,6 @@ struct task_req {
   unsigned long bandwidth_max_down;
   unsigned long bandwidth_max_up;
   unsigned short req_opt;
-  unsigned int  vip_user;
-  const char *vip_ip;
 };
 
 struct task {
index 866e7c5..d1947ce 100644 (file)
@@ -34,7 +34,7 @@ int do_startsession(GNetXmlRpcServer *server,
   gchar *session_timeout = NULL;
   gchar *bandwidth_max_down = NULL;
   gchar *bandwidth_max_up = NULL;
-  gchar *vip_user = NULL;
+  gchar *service_class = NULL;
   gchar *vserver_id = NULL;
   uint32_t id;
   GList *member_node = NULL;
@@ -52,7 +52,7 @@ int do_startsession(GNetXmlRpcServer *server,
   session_timeout    = rh_string_get_sep(param, "|", 5);
   bandwidth_max_down = rh_string_get_sep(param, "|", 6);
   bandwidth_max_up   = rh_string_get_sep(param, "|", 7);
-  vip_user           = rh_string_get_sep(param, "|", 8);
+  service_class      = rh_string_get_sep(param, "|", 8);
   vserver_id         = rh_string_get_sep(param, "|", 9);
 
   if (ip == NULL || username == NULL || session_id == NULL 
@@ -103,8 +103,6 @@ int do_startsession(GNetXmlRpcServer *server,
   else
     req.bandwidth_max_up = 0;
 
-  req.vip_user = atoi (vip_user);
-
   rh_task_startsess(vs, &req);
   member_node = member_get_node_by_id(vs, id);
 
@@ -131,7 +129,7 @@ cleanup:
   g_free(session_timeout);
   g_free(bandwidth_max_down);
   g_free(bandwidth_max_up);
-  g_free(vip_user);
+  g_free(service_class);
   g_free(vserver_id);
   return 0;
 }