Add fakearpd setup and update example configs
authorNeutron Soutmun <neo.neutron@gmail.com>
Mon, 2 Aug 2010 09:11:13 +0000 (16:11 +0700)
committerNeutron Soutmun <neo.neutron@gmail.com>
Mon, 2 Aug 2010 09:11:13 +0000 (16:11 +0700)
  * Add fakearpd setup into firewall script.
  * Update example configs.
  * Login page should get the SERVICECLASS_ATTRIBUTE from config.

example/rahunas-serviceclass.conf.in
example/rahunas-vserver.conf.in
example/rahunas.conf.in
src/rh-config.c
tools/rahunas-firewall.in
tools/rahunas-weblogin-config-update.in
weblogin/login.php

index 5205928..b8fb9e6 100644 (file)
@@ -4,19 +4,25 @@
 // The "service_class = { ... }" main key is required for each service class
 // config declarations.
 //
-// The config could separate to several files or just a single file.
-// If none of any service class config files are present, RahuNAS will disable
-// the class of service feature automatically.
+// The config should separated in several files, single config per file.
+// If serviceclass is enabled but none of any service class config files
+// are present, RahuNAS will disable the class of service feature automatically.
 //
 // service_class = {
-//  name = "Text"
+//  serviceclass_id = "Number"
+//  serviceclass_name = "Text"
 //  description = "Text"
 //  network = "CIDR"
 //  fake_arpd = "yes|no"
 //  fake_arpd_iface = "Interface Name"
 // }
 //
-// Key: name
+// Key: serviceclass_id
+// Syntax: serviceclass_id = "Number"
+// Description: Class-Of-Service ID
+//   A unique number which identify each class of service configs
+//
+// Key: serviceclass_name
 // Syntax: name = "Text"
 // Description: Class-Of-Service name
 //   A unique name which identify each class of service configs
 //   The fake arp daemon should binding to this interface
 
 service_class = {
-  name = "class_silver"
-  description = "Silver service class"
+  serviceclass_id = "1"
+  serviceclass_name = "vip"
+  description = "VIP Service"
   network = "10.10.10.0/24"
   fake_arpd = "no"
   fake_arpd_iface = ""
 }
-
-service_class = {
-  name = "class_gold"
-  description = "Gold service class"
-  network = "10.10.11.0/24"
-  fake_arpd = "yes"
-  fake_arpd_iface = "eth0"
-}
index 9dd4411..838b9bc 100644 (file)
@@ -23,12 +23,13 @@ rahunas_default = {
 
   radius_host = "localhost"
   radius_secret = "testing123"
-  radius_encrypt = "CHAP_MD5"
+  radius_encrypt = "PAP"
   radius_auth_port = "0"
   radius_account_port = "0"
 
   nas_identifier = "RahuNAS-01"
   nas_port = "1"
+  nas_login_proto = "https"
   nas_login_title = "RahuNAS Network"
   nas_default_redirect = "http://www.rahunas.org"
   nas_default_language = "Thai"
index 630463f..c07ec05 100644 (file)
@@ -1,15 +1,19 @@
 //////////////////////////////////////////////////////////
 // RahuNAS Configuration                                //
 // Author: Neutron Soutmun <neo.neutron@gmail.com>      //
-// Date: 2008-11-26                                     //
+// Date: 2010-08-02                                     //
 //////////////////////////////////////////////////////////
 
 main = {
   conf_dir = "@sysconfdir@/rahunas/rahunas.d"
+  serviceclass_conf_dir = "@sysconfdir@/rahunas/serviceclass.d"
   log_file = "@localstatedir@/log/rahunas/rahunas.log"
 
   dhcp = "yes"
 
+  serviceclass = "no"
+  serviceclass_attribute = "WISPr-Billing-Class-Of-Service"
+
   bandwidth_shape = "yes"  
   bittorrent_download_max = "512"
   bittorrent_upload_max = "256"
index 395e481..7e388bd 100755 (executable)
@@ -70,6 +70,8 @@ enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size,
         if (config->rh_main.dhcp != NULL)
           free(config->rh_main.dhcp);
         config->rh_main.dhcp = strdup(value);
+      } else if (strncmp(sub_key, "serviceclass_attribute", strlen ("serviceclass_attribute")) == 0) {
+        // Do nothing, no needs to collect this value
       } else if (strncmp(sub_key, "serviceclass", 12) == 0) {
         config->rh_main.serviceclass = strncmp(value, "yes", 3) == 0 ? 1 : 0;
       } else if (strncmp(sub_key, "bandwidth_shape", 15) == 0) {
index 0d10a4e..77012db 100755 (executable)
@@ -49,6 +49,7 @@ get_config_value () {
 
 # Main
 MAIN_CONF_DIR=`get_config_value main conf_dir $RAHUNAS_CONFIG`
+MAIN_SERVICECLASS_CONF_DIR=`get_config_value main serviceclass_conf_dir $RAHUNAS_CONFIG`
 MAIN_SERVICECLASS=`get_config_value main serviceclass $RAHUNAS_CONFIG`
 MAIN_BANDWIDTH_SHAPE=`get_config_value main bandwidth_shape $RAHUNAS_CONFIG`
 MAIN_BITTORRENT_DOWNLOAD_MAX=`get_config_value main bittorrent_download_max $RAHUNAS_CONFIG`
@@ -757,6 +758,37 @@ serviceclass_set () {
   fi
 }
 
+##
+# Service class - fake-arpd setup
+##
+serviceclass_fakearpd () {
+  opt=$1
+  first=1
+  if [ "$opt" = "start" ]; then
+    for conf in $MAIN_SERVICECLASS_CONF_DIR/*.conf
+    do
+      enable=`get_config_value service_class fake_arpd $conf`
+
+      if [ "$enable" = "yes" ]; then
+        fakearpd_iface=`get_config_value service_class fake_arpd_iface $conf`
+        network=`get_config_value service_class network $conf`
+
+        if [ -n "$fakearpd_iface" ] && [ -n "$network" ]; then
+          if [ $first -eq 1 ]; then
+            echo
+            first=0
+          fi
+
+          echo -n "RahuNAS Fake ARP starting: "
+          $FARPD -i $fakearpd_iface $network
+        fi
+      fi
+    done
+  elif [ "$opt" = "stop" ]; then
+    killall -9 $FARPD &> /dev/null 2>&1
+  fi
+}
+
 do_get_config () {
   file=$1
   opt=$2
@@ -793,6 +825,7 @@ start () {
   if [ "$MAIN_SERVICECLASS" = "yes" ]; then
     touch $SERVICECLASS_STATE
     serviceclass_set start
+    serviceclass_fakearpd start
   fi
 
   touch $RUN
@@ -803,6 +836,7 @@ stop () {
 
   if [ -f $SERVICECLASS_STATE ]; then
     serviceclass_set cleanup
+    serviceclass_fakearpd stop
     rm -f $SERVICECLASS_STATE
   fi
    
index 8a390e5..f6b992c 100644 (file)
@@ -20,6 +20,7 @@ get_config_value () {
 
 # Main
 MAIN_CONF_DIR=`get_config_value main conf_dir $RAHUNAS_CONFIG`
+MAIN_SERVICECLASS_ATTRIBUTE=`get_config_value main serviceclass_attribute $RAHUNAS_CONFIG`
 
 # DB
 RAHUNAS_DB=@localstatedir@/lib/rahunas/rahunas.db
@@ -103,6 +104,7 @@ fi
 
 # Clear old config
 echo "<?php" > $destfile
+echo "define('SERVICECLASS_ATTRIBUTE', '$MAIN_SERVICECLASS_ATTRIBUTE');" >> $destfile
 
 for file in `find $MAIN_CONF_DIR -name '*.conf'`;
 do
index 1ac7122..821334a 100644 (file)
@@ -101,6 +101,10 @@ if (!empty($_POST['user']) && !empty($_POST['passwd'])) {
     $racct->calling_station_id = returnMacAddress();
     $racct->gen_session_id();
 
+    $serviceclass_attrib = defined('SERVICECLASS_ATTRIBUTE') ?
+                           SERVICECLASS_ATTRIBUTE :
+                           "WISPr-Billing-Class-Of-Service";
+
     try {
       $prepareData = array (
         "IP" => $ip,
@@ -110,7 +114,7 @@ if (!empty($_POST['user']) && !empty($_POST['passwd'])) {
         "Session-Timeout" => $rauth->attributes['session_timeout'],
         "Bandwidth-Max-Down" => $rauth->attributes['WISPr-Bandwidth-Max-Down'],
         "Bandwidth-Max-Up" => $rauth->attributes['WISPr-Bandwidth-Max-Up'],
-        "Class-Of-Service" => $rauth->attributes['WISPr-Billing-Class-Of-Service'],
+        "Class-Of-Service" => $rauth->attributes[$serviceclass_attrib],
       );
       $result = $xmlrpc->do_startsession($vserver_id, $prepareData);
       if (strstr($result,"Client already login")) {