Advertisement
Guest User

Untitled

a guest
Jan 30th, 2022
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 185.75 KB | None | 0 0
  1. ./*.sh
  2. ==> ./8023af.sh <==
  3. #!/bin/sh
  4.  
  5. # These chainmask values are programmed for POE AF operation
  6. CHAIN_2G_MIN=1
  7. CHAIN_5G_MIN=3
  8.  
  9. # Default chainmask values for 4x4
  10. CHAIN_2G_MAX=15
  11. CHAIN_5G_MAX=15
  12.  
  13. # These power values are programmed for POE AF operation
  14. TXPWR_2G_MIN=15
  15. TXPWR_5G_MIN=18
  16.  
  17. # Default TX PWR values
  18. TXPWR_2G_MAX=30
  19. TXPWR_5G_MAX=24
  20.  
  21. RADIO_CONF_2G="/tmp/radio1/radio.conf"
  22. RADIO_CONF_5G="/tmp/radio0/radio.conf"
  23.  
  24. #NOTE! This file is also referenced by init_ap_script.sh
  25. POE_TXPOW_LIM_FILE="/tmp/poe_txpow_lim"
  26.  
  27. #value of gpio15 inidcates AF or AT: AF=1 and AT=0
  28. #value of gpio17 indicates DC or PoE: DC=1 and PoE=0
  29. AF_PIN=15
  30. DC_PIN=16
  31. POE_PIN=17
  32.  
  33. GPIODIR=/sys/class/gpio
  34.  
  35. # TX PWR values defined in template
  36. TMPL_TXPWR_2G=""
  37. TMPL_TXPWR_5G=""
  38.  
  39. TXPWR_2G=""
  40. TXPWR_5G=""
  41.  
  42. update_txpow_lim()
  43. {
  44.  
  45.     echo DC=$7 > $POE_TXPOW_LIM_FILE
  46.   echo AF=$1 >> $POE_TXPOW_LIM_FILE
  47.   echo POE=$2 >> $POE_TXPOW_LIM_FILE
  48.   echo TXPOW_LIM_2G=$3 >> $POE_TXPOW_LIM_FILE
  49.   echo TXPOW_LIM_5G=$4 >> $POE_TXPOW_LIM_FILE
  50.     echo TX_CHAINMASK_IF1=$5 >> $POE_TXPOW_LIM_FILE
  51.     echo RX_CHAINMASK_IF1=$5 >> $POE_TXPOW_LIM_FILE
  52.     echo TX_CHAINMASK_IF0=$6 >> $POE_TXPOW_LIM_FILE
  53.     echo RX_CHAINMASK_IF0=$6 >> $POE_TXPOW_LIM_FILE
  54.  
  55. }
  56.  
  57. eth_usb_ctrl()
  58. {
  59.  
  60.     local TXPOW_LIM_2G=""
  61.     local TXPOW_LIM_5G=""
  62.     local CHAINMASK_2G=""
  63.     local CHAINMASK_5G=""
  64.  
  65.     if [ "$1" = "down" ]; then
  66.  
  67.         # turn usb off
  68.         gpio.sh 67 out 0
  69.     # turn eth1 off
  70.     ifconfig eth1 down
  71.     gpio.sh 8 out 0
  72.  
  73.         TXPOW_LIM_2G=$TXPWR_2G_MIN
  74.         TXPOW_LIM_5G=$TXPWR_5G_MIN
  75.  
  76.         CHAINMASK_2G=$CHAIN_2G_MIN
  77.         CHAINMASK_5G=$CHAIN_5G_MIN
  78.  
  79.     fi
  80.  
  81.     if [ "$1" = "up" ]; then
  82.  
  83.         # turn usb on
  84.         gpio.sh 67 out 1
  85.         # turn eth1 on
  86.         gpio.sh 8 out 1
  87.         ifconfig eth1 up
  88.  
  89.         TXPOW_LIM_2G=$TXPWR_2G_MAX
  90.     TXPOW_LIM_5G=$TXPWR_5G_MAX
  91.  
  92.     CHAINMASK_2G=$CHAIN_2G_MAX
  93.     CHAINMASK_5G=$CHAIN_5G_MAX
  94.  
  95.     fi
  96.  
  97.     update_txpow_lim $AF $POE $TXPOW_LIM_2G $TXPOW_LIM_5G $CHAINMASK_2G $CHAINMASK_5G $DC
  98.  
  99. }
  100.  
  101. wifi_ctrl()
  102. {
  103.  
  104.     local TXPWR_2G_VAL=$3
  105.     local TXPWR_5G_VAL=$4
  106.     local CHAIN_2G_VAL=$1
  107.     local CHAIN_5G_VAL=$2
  108.  
  109.     iwpriv wifi0 txchainmask $CHAIN_5G_VAL
  110.     iwpriv wifi0 rxchainmask $CHAIN_5G_VAL
  111.     iwpriv wifi1 txchainmask $CHAIN_2G_VAL
  112.     iwpriv wifi1 rxchainmask $CHAIN_2G_VAL
  113.  
  114.     TXPWR_2G_VAL=$(($TXPWR_2G_VAL*2))
  115.     TXPWR_5G_VAL=$(($TXPWR_5G_VAL*2))
  116.  
  117.     iwpriv wifi1 TXPowLim2G $TXPWR_2G_VAL
  118.     iwpriv wifi0 TXPowLim5G $TXPWR_5G_VAL
  119.  
  120. }
  121.  
  122. get_tmpl_txpwr()
  123. {
  124.  
  125.     local TMPL_TXPWR=""
  126.     local RADIO_CONF=$2
  127.     local TXPWR_MAX=$3
  128.     local ENA_AP_TXPOW=""
  129.  
  130.     ENA_AP_TXPOW=`grep ENA_AP_TXPOW $RADIO_CONF | cut -d "=" -f 2 | xargs`
  131.  
  132.     if [ "${ENA_AP_TXPOW}" = "0" ]; then
  133.         TMPL_TXPWR=$TXPWR_MAX
  134.   else
  135.     TMPL_TXPWR=`cat $RADIO_CONF | grep AP_TXPOW_LIM | cut -d = -f 2`
  136.   fi
  137.  
  138.     if [ "$1" = "2G" ]; then
  139.         TMPL_TXPWR_2G=$TMPL_TXPWR
  140.     else
  141.         TMPL_TXPWR_5G=$TMPL_TXPWR
  142.     fi
  143.  
  144. }
  145.  
  146. get_power_source()
  147. {
  148.     POWER_SOURCE=/tmp/power_source
  149.  
  150.         if [ ! -e $GPIODIR/gpio$AF_PIN ]; then
  151.                 echo $AF_PIN > $GPIODIR/export
  152.         fi
  153.  
  154.         if [ ! -e $GPIODIR/gpio$POE_PIN ]; then
  155.                 echo $POE_PIN > $GPIODIR/export
  156.         fi
  157.  
  158.         if [ ! -e $GPIODIR/gpio$DC_PIN ]; then
  159.                 echo $DC_PIN > $GPIODIR/export
  160.         fi
  161.         AF=$(cat $GPIODIR/gpio$AF_PIN/value 2> /dev/null)
  162.         POE=$(cat $GPIODIR/gpio$POE_PIN/value 2> /dev/null)
  163.         DC=$(cat $GPIODIR/gpio$DC_PIN/value 2> /dev/null)
  164.         if [ "$DC" = "0" ]; then
  165.                 if [ "$AF" = "1" ]; then
  166.                         echo "802.3af" > $POWER_SOURCE
  167.                 else
  168.                         echo "802.3at" > $POWER_SOURCE
  169.                 fi
  170.         else
  171.                 echo "DC" > $POWER_SOURCE
  172.         fi
  173. }
  174.  
  175.  
  176. get_txpwr()
  177. {
  178.  
  179.     local TXPWR=""
  180.     local TMPL_TXPWR=$2
  181.     local TXPWR_THRESH=$3
  182.  
  183.   if [ $TMPL_TXPWR -gt $TXPWR_THRESH ]; then
  184.     TXPWR=$TXPWR_THRESH
  185.   else
  186.         TXPWR=$TMPL_TXPWR
  187.   fi
  188.  
  189.     if [ "$1" = "2G" ]; then
  190.         TXPWR_2G=$TXPWR
  191.     else
  192.         TXPWR_5G=$TXPWR
  193.     fi
  194. }
  195.  
  196.  
  197. if [ ! -e $GPIODIR/gpio$AF_PIN ]; then
  198.     echo $AF_PIN > $GPIODIR/export
  199. fi
  200.  
  201. if [ ! -e $GPIODIR/gpio$POE_PIN ]; then
  202.     echo $POE_PIN > $GPIODIR/export
  203. fi
  204.  
  205. if [ ! -e $GPIODIR/gpio$DC_PIN ]; then
  206.     echo $DC_PIN > $GPIODIR/export
  207. fi
  208.  
  209. #echo "Starting to handle 802.3af or 802.3at..."
  210. i=1
  211.  
  212. #AF_SET and AT_SET flags are variables used to control when to change config
  213. #They are used to avoid repetitive config changes, i.e. power and chainmasks
  214. AF_SET=0
  215. AT_SET=1
  216. DC_SET=1
  217. PREV_WIFI_DRV_STATE=0
  218. WIFI_DRV_LOADED=0
  219.  
  220. while [ "$i" -ne 0 ]
  221. do
  222.     #read the gpios in every iteration in the beginning
  223.  
  224.     AF=$(cat $GPIODIR/gpio$AF_PIN/value)
  225.     POE=$(cat $GPIODIR/gpio$POE_PIN/value)
  226.     DC=$(cat $GPIODIR/gpio$DC_PIN/value)
  227.     WIFI_DRV_LOADED=`lsmod | grep umac | wc -l`
  228.  
  229.     if [ -e "$RADIO_CONF_2G" -a -e "$RADIO_CONF_5G" ]; then
  230.  
  231.         get_tmpl_txpwr "2G" $RADIO_CONF_2G $TXPWR_2G_MAX
  232.  
  233.         get_tmpl_txpwr "5G" $RADIO_CONF_5G $TXPWR_5G_MAX
  234.  
  235.     fi
  236.  
  237.     if [ $WIFI_DRV_LOADED -ge 9 -a $PREV_WIFI_DRV_STATE -eq 0 ]; then
  238.         # WiFi drivers have just been loaded
  239.         # Wait for some time to avoid any race condition
  240.         sleep 5
  241.     fi
  242.     PREV_WIFI_DRV_STATE=$WIFI_DRV_LOADED
  243.  
  244.     #echo "AF=$AF POE=$POE DC=$DC TMPL_2G=$TMPL_TXPWR_2G TMPL_5G=$TMPL_TXPWR_5G AF_SET=$AF_SET AT_SET=$AT_SET DC_SET=$DC_SET"
  245.  
  246.     #1st if starts 
  247.     #detect if AT to AF transition happened??? OR DC power transition happened
  248.     if [ "$DC" = "0" ]; then
  249.         if [ "$AF" = "1" -a  "$POE" = "0" ]; then
  250.  
  251.             #2nd if starts
  252.             if [ "$AF_SET" = "0"  -a "$AT_SET" = "1" ]; then
  253.  
  254.                 eth_usb_ctrl down
  255.  
  256.                 if [ $WIFI_DRV_LOADED -ge 9 -a "$TMPL_TXPWR_2G" != "" -a "$TMPL_TXPWR_5G" != "" ]; then
  257.  
  258.                     # reduce tx power
  259.  
  260.                     get_txpwr "2G" $TMPL_TXPWR_2G $TXPWR_2G_MIN
  261.  
  262.                     get_txpwr "5G" $TMPL_TXPWR_5G $TXPWR_5G_MIN
  263.  
  264.                     wifi_ctrl $CHAIN_2G_MIN $CHAIN_5G_MIN $TXPWR_2G $TXPWR_5G
  265.  
  266.                     AF_SET=1
  267.                     AT_SET=0
  268.                 fi
  269.  
  270.             fi
  271.             #2nd if ends
  272.         fi
  273.         if [ "$DC_SET" = "1" ]; then
  274.             DC_SET=0
  275.         fi
  276.     fi
  277.     #1st if ends
  278.    
  279.     #3rd if starts
  280.     if [ "$AF" = "0" -a  "$POE" = "0" -a "$DC" = "0" ] || [ "$DC" = "1" ]; then
  281.         #4th if starts
  282.         if [ "$AT_SET" = "0" -a  "$AF_SET" = "1" ] || [ "$DC_SET" = "0" ]; then
  283.  
  284.             eth_usb_ctrl up
  285.  
  286.             if [ $WIFI_DRV_LOADED -ge 9 -a "$TMPL_TXPWR_2G" != "" -a "$TMPL_TXPWR_5G" != "" ]; then
  287.  
  288.             # increase tx power
  289.  
  290.                 get_txpwr "2G" $TMPL_TXPWR_2G $TXPWR_2G_MAX
  291.  
  292.         get_txpwr "5G" $TMPL_TXPWR_5G $TXPWR_5G_MAX
  293.  
  294.                 wifi_ctrl $CHAIN_2G_MAX $CHAIN_5G_MAX $TXPWR_2G $TXPWR_5G
  295.  
  296.                 AT_SET=1
  297.                 AF_SET=0
  298.                 DC_SET=1
  299.  
  300.             fi
  301.             #4th if ends
  302.         fi
  303.         #3rd if ends
  304.     fi
  305.     get_power_source
  306.     sleep 5
  307. done
  308.  
  309. ==> ./ap-config-parser.sh <==
  310. #!/bin/sh
  311. . /opt/sensor/env
  312.  
  313. #VLAN_ENV_FILE='/tmp/vlans_env'
  314. section_names=$(echo -en "RADIO\nVAP\nGUEST")
  315. MAX_VLAN_ID=4094
  316. MAX_DYNAMIC_VLAN_COUNT=32
  317. global_vap_count=0
  318. WIRED_GUEST_ALREADY_ENABLED=0
  319. DHCPD_AUTO_TIME=2
  320. STANDALONE_MODE="/opt/standalone_mode"
  321. APP_VISIBILITY_SUPPORT=`cat /opt/sensor/capability.conf | sed 's/^[[:blank:]]*//;' | grep "^app_visibility_support" | cut -d "=" -f2 | xargs`
  322.  
  323. ## $1: File_name
  324. ## $2: string to be replaced(no regexps allowed)
  325. ## $3: new string
  326. replace_string_in_a_file()
  327. {
  328.     $(sed -i $1 -e "s/$2/$3/g")
  329. }
  330.  
  331. get_client_vap_list()
  332. {
  333.         CLIENT_VAP_LIST=""
  334.         local ATH_VAP_LIST=`echo $VAP_LIST | sed 's/,/\ /g' | xargs`
  335.     for vap in $ATH_VAP_LIST
  336.     do
  337.             ath=`echo $vap | awk -F "." '{print $1}' | xargs`
  338.         if [ "$CLIENT_VAP_LIST" != "" ]; then
  339.                 CLIENT_VAP_LIST="${CLIENT_VAP_LIST},${ath}"
  340.         else
  341.                 CLIENT_VAP_LIST="${ath}"
  342.         fi
  343.     done
  344. }
  345.  
  346. ## $1: dynamic_vlan_list
  347. ##
  348.  
  349. get_dynamic_vap_list()
  350. {
  351.     local dynamic_vlan_ids
  352.     local vap_list
  353.     local ath_name
  354.     vap_list=`echo $VAP_LIST | sed 's/,/\ /g' | xargs`
  355.  
  356.     dynamic_vlan_ids=`echo $1 | sed 's/,/\ /g' | xargs`
  357.  
  358.     DYNAMIC_VAP_LIST=""
  359.     for vap in $vap_list
  360.     do
  361.         ath_name=`echo $vap | awk -F "." '{print $1}' | xargs`
  362.  
  363.         for dynamic_vlan in $dynamic_vlan_ids
  364.         do
  365.             [ "$dynamic_vlan" = "0" ] &&  dynamic_vlanid_suffix="" || dynamic_vlanid_suffix=".$dynamic_vlan"
  366.             if [ "$DYNAMIC_VAP_LIST" != "" ]; then
  367.                 DYNAMIC_VAP_LIST=`echo $DYNAMIC_VAP_LIST,$ath_name$dynamic_vlanid_suffix`
  368.             else
  369.                 DYNAMIC_VAP_LIST="$ath_name$dynamic_vlanid_suffix"
  370.             fi
  371.         done
  372.     done
  373. }
  374.  
  375. ## $1: Number of vaps expected
  376. ## $2: Suffix
  377. get_vap_list()
  378. {
  379.     local total_vap_count
  380.     local i=0
  381.     local count
  382.  
  383.     VAP_LIST=""
  384.     if [ "$CURRENT_SECTION_CMD" != "NEW" -a -f "/tmp/profile${CURRENT_SECTION_ID}_old_params" ]; then
  385.         OLD_VAP_LIST=`grep "^VAP_LIST" "/tmp/profile${CURRENT_SECTION_ID}_old_params" | cut -d "=" -f2`
  386.         OLD_VAP_LIST=`echo $OLD_VAP_LIST | sed 's/,/\ /g' | xargs`
  387.         for vap in $OLD_VAP_LIST
  388.         do
  389.             ath=`echo $vap | awk -F "." '{print $1}' | xargs`
  390.             if [ "$VAP_LIST" != "" ]; then
  391.                 VAP_LIST="${VAP_LIST},${ath}${2}"
  392.             else
  393.                 VAP_LIST="${ath}${2}"
  394.             fi
  395.         done
  396.         return 0
  397.     fi
  398.  
  399.     count=$1
  400.   if [ "$BUILD_V2" = "TRUE" ]; then
  401.     total_vap_count=$TOTAL_VAP_COUNT
  402.   else
  403.   #BUILD_V1
  404.     if [ "$PLATFORM_TYPE" = "PLATFORM_SENAO_CAP4200" -o "$PLATFORM_TYPE" = "PLATFORM_SENAO_OAP6200AG" -o "$PLATFORM_TYPE" = "PLATFORM_LITEON_DB12x" -o "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP135" -o "$PLATFORM_TYPE" = "PLATFORM_LITEON_OUTDOOR_AP135" -o "$PLATFORM_TYPE" = "PLATFORM_ACCTON_AP135_2X2" -o "$PLATFORM_TYPE" = "PLATFORM_LITEON_WALLJACK_AP135" -o "$PLATFORM_TYPE" = "PLATFORM_RJIL_AV2_WIFI" ]; then
  405.         total_vap_count=16
  406.     else
  407.         total_vap_count=8
  408.     fi
  409.   #BUILD_V2
  410.   fi
  411.  
  412.     while [ $i -lt $total_vap_count ];
  413.     do
  414.         ifconfig ath$i > /dev/null 2>&1
  415.         if [ "$?" = "0" ]; then
  416.             i=`expr $i + 1`
  417.             continue
  418.         fi
  419.         ifconfig mesh$i > /dev/null 2>&1
  420.         if [ "$?" = "0" ]; then
  421.             i=`expr $i + 1`
  422.             continue
  423.         fi
  424.         count=`expr $count - 1`
  425.         if [ "$VAP_LIST" != "" ]; then
  426.             VAP_LIST=`echo $VAP_LIST,ath$i$2`
  427.         else
  428.             VAP_LIST="ath$i$2"
  429.         fi
  430.         i=`expr $i + 1`
  431.         if [ "$count" = "0" ]; then
  432.             return 0
  433.         fi
  434.     done
  435.     return 1
  436. }
  437.  
  438. sanitize_integer()
  439. {
  440.     local value
  441.     local min_val
  442.     local max_val
  443.     value=$1
  444.     min_val=$2
  445.     max_val=$3
  446.  
  447.     value=`expr $value + 0` > /dev/null 2>&1    # For some reason, this doesnt like value = 0
  448.     # Hence the special check below
  449.     if [ $? -ne 0 ]; then
  450.         if [ "$value" != "0" ]; then
  451.             value=`expr $max_val + 10`
  452.         fi
  453.     elif [ $value -gt $max_val -o $value -lt $min_val ]; then
  454.         value=`expr $max_val + 10`
  455.     fi
  456.     return $value
  457. }
  458.  
  459. init_profile_var()
  460. {
  461.     DHCPD_LOCAL_IP=""
  462.     DHCPD_SUBNET_MASK=""
  463.     DHCPD_START_IP=""
  464.     DHCPD_END_IP=""
  465.     DHCPD_LEASE=0
  466.     LoginTimeout=0
  467.     BlackoutTime=0
  468.     Homepage=0
  469.     DNSAddr=""
  470.     BlockedWebHosts=""
  471.     AllowedWebHosts=""
  472.     AllowedWebHosts_old=""
  473.     AllowedWalledGardenHosts=""
  474.     AllowedAuthSitesHosts=""
  475.     ApSsid=""
  476.     PORTAL_BUNDLE_URL=""
  477.     PORTAL_BUNDLE_MD5SUM=""
  478.     SSID_IS_PORTAL_CONFIGURED=0
  479.     VAP_LIST=""
  480.     NAT_INTERNAL_INTERFACE=""
  481.     EXTERNAL_INTERFACE=""
  482.     NAT_VLANID=""
  483.     FIREWALL_ENABLED=""
  484.     FW_DEFAULT=""
  485.     SSID_PROFILE_ID=""
  486.     WEBQ_ENABLED=""
  487.     webq_exempt_list=""
  488.     webq_exempt_list_old=""
  489.     webq_url=""
  490.     EXTERNAL_PORTAL_URL=""
  491.     PORTAL_SECRET_KEY=""
  492.     PORTAL_SERVICE_ID=""
  493.     VALIDATE_PORTAL=""
  494.     PORTAL_RADIUS_SERVER_IP=""
  495.     PORTAL_RADIUS_SERVER_PORT=""
  496.     PORTAL_RADIUS_SECRET_KEY=""
  497.     PORTAL_RADIUS_SERVER_IP_2=""
  498.     PORTAL_RADIUS_SERVER_PORT_2=""
  499.     PORTAL_RADIUS_SECRET_KEY_2=""
  500.     PORTAL_RADIUS_ACCT_ENABLED="0"
  501.     PORTAL_RADIUS_ACCT_INTERVAL=""
  502.     PORTAL_RADIUS_ACCT_SERVER_IP=""
  503.     PORTAL_RADIUS_ACCT_SERVER_PORT=""
  504.     PORTAL_RADIUS_ACCT_SECRET_KEY=""
  505.     PORTAL_RADIUS_ACCT_SERVER_IP_2=""
  506.     PORTAL_RADIUS_ACCT_SERVER_PORT_2=""
  507.     PORTAL_RADIUS_ACCT_SECRET_KEY_2=""
  508.     PORTAL_RADIUS_CALLED_STATION_ID=""
  509.     PORTAL_RADIUS_NAS_ID=""
  510.     REQUEST_TYPE_TO_PORTAL=""
  511.     SERVICE_ID_TO_PORTAL=""
  512.     CHALLENGE_TO_PORTAL=""
  513.     CLIENT_MAC_TO_PORTAL=""
  514.     AP_MAC_TO_PORTAL=""
  515.     AP_IP_TO_PORTAL=""
  516.     AP_PORT_TO_PORTAL=""
  517.     FAILURE_COUNT_TO_PORTAL=""
  518.     USER_URL_TO_PORTAL=""
  519.     LOGIN_URL_TO_PORTAL=""
  520.     LOGOFF_URL_TO_PORTAL=""
  521.     BLACKOUT_TIME_TO_PORTAL=""
  522.     CHALLENGE_FROM_PORTAL=""
  523.     RESPONSE_TYPE_FROM_PORTAL=""
  524.     CHALLENGE_RESPONSE_FROM_PORTAL=""
  525.     REDIRECT_URL_FROM_PORTAL=""
  526.     SESSION_TIMEOUT_FROM_PORTAL=""
  527.     USERNAME_FROM_PORTAL=""
  528.     PASSWORD_FROM_PORTAL=""
  529.     ExternalInterface=""
  530.     SPLASHLESS_ROAMING_ENABLED="0"
  531.     ASSOCIATION_ANALYTICS_ENABLED="0"
  532.     GRE_REMOTE_ENDPOINT=""
  533.     GRE_KEY=""
  534.     GRE_EXEMPTED_IP_LIST=""
  535.     IS_GRE_CONFIGURED="0"
  536.     GRE_TUNNEL_IP=""
  537.     CWMENABLE=""
  538.     PORTAL_INTERNET_DOWN_ENABLED="0"
  539.     CONTENT_ANALYTICS_ENABLED="0"
  540.     POST_HTTP_DATA_ENABLED="0"
  541.     POST_HTTP_DATA_INTERVAL="0"
  542.     POST_HTTP_DATA_USERNAME=""
  543.     POST_HTTP_DATA_SERVER=""
  544.     POST_HTTP_DATA_PASSWD=""
  545.     POST_HTTP_DATA_REQ_BODY="0"
  546.     POST_HTTP_DATA_UA="1"
  547.     POST_HTTP_DATA_REFERER="1"
  548.     POST_HTTP_DATA_UPLOAD_ON_MEM_THRSLD="1"
  549.     MAC_FILTER_ENABLED=""
  550.     MAC_FILTER_ACTION=""
  551.     mesh_passphrase=""
  552.     MESH_ENABLED=0
  553.     MESH_ID=0
  554.     MESH_MAX_HOP_COUNT=0
  555.     MESH_MAX_ALLOWED_LINKS=0
  556.     MESH_MIN_RSSI=0
  557.     dynamic_vlan_enabled=0
  558.     bonjour_gateway_enabled=0
  559.     per_user_bandwidth_enable=0
  560.     ena_remote_bridging=0
  561.     PORTAL_GATE1_AUTH="0"
  562.     ena_ap_acct=""
  563.     device_name=`cat /opt/sensor/sensor.conf | grep "device_name"`
  564.     device_name="`extract_value \"$device_name\" "device_name"`"
  565.  
  566.     location_identifier=`cat /opt/sensor/sensor.conf | grep location_identifier`
  567.     location_identifier="`extract_value \"$location_identifier\" "location_identifier"`"
  568.  
  569.     ena_ap_acct=""
  570.     YADWIRE_INTEGRATION_ENABLED="0"
  571.     YADWIRE_PING_INTERVAL="300"
  572.     YADWIRE_USER_KEY=""
  573.     YADWIRE_NETWORK_ID=""
  574.     DNAT_ENABLED="0"
  575. }
  576.  
  577. extract_value()
  578. {
  579.     echo "$1" | sed "s/^${2}=//g" #echo -E
  580. }
  581.  
  582. sanitize_dynamic_vlan_list()
  583. {
  584.     local dynamic_vlan_ids=`echo $1 | sed 's/,/\ /g' | xargs`
  585.     local ap_vlan_id=$2
  586.     local counter=1
  587.  
  588.     dynamic_vlan_list=""
  589.     for dynamic_vlan in $dynamic_vlan_ids
  590.     do
  591.         if [ "$dynamic_vlan" != "$ap_vlan_id" ]; then
  592.             if [ "$dynamic_vlan_list" != "" ]; then
  593.                 dynamic_vlan_list=`echo $dynamic_vlan_list,$dynamic_vlan`
  594.             else
  595.                 dynamic_vlan_list="$dynamic_vlan"
  596.             fi
  597.             let counter++
  598.             if [ "$counter" -gt "$MAX_DYNAMIC_VLAN_COUNT" ]; then
  599.                 break
  600.             fi
  601.         fi
  602.     done
  603. }
  604.  
  605. sanitize_vlan_id()
  606. {
  607.     vlan_id=$1
  608.  
  609.     vlan_id=`expr $vlan_id + 0` > /dev/null 2>&1    # For some reason, this doesnt like vlan_id = 0
  610.                             # Hence the special check below
  611.     if [ $? -ne 0 ]; then
  612.         if [ "$vlan_id" != "0" ]; then
  613.             vlan_id=`expr $MAX_VLAN_ID + 10`
  614.         fi
  615.     elif [ $vlan_id -gt $MAX_VLAN_ID -o $vlan_id -lt 0 ]; then
  616.         vlan_id=`expr $MAX_VLAN_ID + 10`
  617.     fi
  618.     return $vlan_id
  619. }
  620.  
  621. update_wgarden_conf_common()
  622. {
  623.     WGARDEN_CONF=$1/wgarden.conf
  624.         echo "NewTTL=10" >> $WGARDEN_CONF
  625.         echo "TTLCheckInterval=14400" >> $WGARDEN_CONF # 4 hours
  626.         echo "wgdQueueNo=$profile_id" >> $WGARDEN_CONF
  627.     echo "PROFILE_ID=$profile_id" >> $WGARDEN_CONF
  628. }
  629.  
  630. update_webq_conf()
  631. {
  632.     WEBQ_CONF=$1/webq.conf
  633.  
  634.     touch /tmp/webq_dummy.sh
  635.     chmod 777 /tmp/webq_dummy.sh
  636.  
  637.     #Setting static portion of $NOCAT_CONF
  638.     echo  > $WEBQ_CONF
  639.     echo "GatewayMode     Open" >>$WEBQ_CONF
  640.     echo "SplashForm      $webq_url" >>$WEBQ_CONF
  641.     echo "GatewayPort    $NOCAT_PORT" >> $WEBQ_CONF
  642.     echo "GatewayAddr    $DHCPD_LOCAL_IP" >> $WEBQ_CONF
  643.  
  644.     echo "ResetCmd  /tmp/webq_dummy.sh" >>$WEBQ_CONF
  645.     echo "PermitCmd /tmp/webq_dummy.sh" >>$WEBQ_CONF
  646.     echo "DenyCmd   /tmp/webq_dummy.sh" >>$WEBQ_CONF
  647.     echo "OperatingMode     4"  >> $WEBQ_CONF
  648.     echo "SplashlessRoamingEnabled   0" >> $WEBQ_CONF
  649.     echo "VALIDATE_PORTAL   0"   >> $WEBQ_CONF
  650.     echo "ApMac     $ETH_MAC" >> $WEBQ_CONF
  651.     echo "ApSsid    $ApSsid"        >> $WEBQ_CONF
  652.     echo "ExternalInterface $ExternalInterface" >> $WEBQ_CONF
  653.     echo "CLIENT_MAC_TO_PORTAL     client_mac" >> $WEBQ_CONF
  654.     echo "AP_MAC_TO_PORTAL  ap_mac" >> $WEBQ_CONF
  655.     echo "AP_SSID_TO_PORTAL         ap_ssid"   >> $WEBQ_CONF
  656.     echo "USER_URL_TO_PORTAL      user_url" >> $WEBQ_CONF
  657. }
  658.  
  659. ## which_ip_address funcion is added from /sbin/validate_ip_address.sh file
  660. . /sbin/validate_ip_address.sh
  661. IPV6_SUPPORT=`cat /opt/sensor/capability.conf | sed 's/^[[:blank:]]*//;' | grep "^advance_ipv6" | cut -d "=" -f2 | xargs`
  662.  
  663.  
  664. update_profile_conf()
  665. {
  666.     PROFILE_CONF=$1/profile.conf
  667.     echo "DEFAULT_FW_ACTION=$FW_DEFAULT" >> $PROFILE_CONF
  668.     echo "VAP_LIST=$VAP_LIST" >>$PROFILE_CONF
  669.     echo "FIREWALL_ENABLED=$FIREWALL_ENABLED" >> $PROFILE_CONF
  670.     echo "TRAFFIC_SHAPING_UPLOAD=$TRAFFIC_SHAPING_UPLOAD" >>$PROFILE_CONF
  671.     echo "TRAFFIC_SHAPING_DOWNLOAD=$TRAFFIC_SHAPING_DOWNLOAD" >>$PROFILE_CONF
  672.     echo "WEBQ_ENABLED=$WEBQ_ENABLED" >>$PROFILE_CONF
  673.     echo "SSID_PROFILE_ID=$SSID_PROFILE_ID" >>$PROFILE_CONF
  674.     echo "ExternalDevice=$EXTERNAL_INTERFACE" >>$PROFILE_CONF
  675.     echo "VLAN_ID=$vlan_id" >>$PROFILE_CONF
  676.     echo "CONTENT_ANALYTICS_ENABLED=$CONTENT_ANALYTICS_ENABLED">>$PROFILE_CONF
  677.     echo "POST_HTTP_DATA_ENABLED=$POST_HTTP_DATA_ENABLED">>$PROFILE_CONF
  678.  
  679.     if [ "$POST_HTTP_DATA_ENABLED" = "1" ]; then
  680.         echo "POST_HTTP_DATA_REQ_BODY=$POST_HTTP_DATA_REQ_BODY">>$PROFILE_CONF
  681.         echo "POST_HTTP_DATA_UA=$POST_HTTP_DATA_UA">>$PROFILE_CONF
  682.         echo "POST_HTTP_DATA_REFERER=$POST_HTTP_DATA_REFERER">>$PROFILE_CONF
  683.         echo "POST_HTTP_DATA_UPLOAD_ON_MEM_THRSLD=$POST_HTTP_DATA_UPLOAD_ON_MEM_THRSLD">>$PROFILE_CONF
  684.         echo "POST_HTTP_DATA_INTERVAL=$POST_HTTP_DATA_INTERVAL">>$PROFILE_CONF
  685.         echo "POST_HTTP_DATA_SERVER=$POST_HTTP_DATA_SERVER">>$PROFILE_CONF
  686.     fi
  687.  
  688.     echo "MAC_FILTER_ENABLED=$MAC_FILTER_ENABLED" >>$PROFILE_CONF
  689.     echo "MAC_FILTER_ACTION=$MAC_FILTER_ACTION" >>$PROFILE_CONF
  690.  
  691.     if [ "$IPV6_SUPPORT" = "1" -a "$auth_server_addr" != "" ]; then
  692.                         which_ip_address $auth_server_addr
  693.                         if [ "$?" = "6" ]; then
  694.                                 echo "radius_server_addr_ipv6=1" >> $PROFILE_CONF
  695.                                 radius_server_addr_ipv6=1
  696.                                 echo "radius_acctserver_addr_ipv6=1" >> $PROFILE_CONF
  697.                                 radius_acctserver_addr_ipv6=1
  698.                         else
  699.                                 echo "radius_acctserver_addr_ipv6=0" >> $PROFILE_CONF
  700.                                 radius_acctserver_addr_ipv6=0
  701.                         fi
  702.         elif [ "$IPV6_SUPPORT" = "1" -a "$acct_server_addr" != "" ]; then
  703.                         which_ip_address $acct_server_addr
  704.                         if [ "$?" = "6" ]; then
  705.                                 echo "radius_acctserver_addr_ipv6=1" >> $PROFILE_CONF
  706.                                 radius_acctserver_addr_ipv6=1
  707.                         else
  708.                                 echo "radius_acctserver_addr_ipv6=0" >> $PROFILE_CONF
  709.                                 radius_acctserver_addr_ipv6=0
  710.                         fi
  711.         fi
  712.  
  713.     echo "YADWIRE_INTEGRATION_ENABLED=$YADWIRE_INTEGRATION_ENABLED" >>$PROFILE_CONF
  714.     echo "YADWIRE_PING_INTERVAL=$YADWIRE_PING_INTERVAL" >>$PROFILE_CONF
  715.     echo "YADWIRE_USER_KEY=$YADWIRE_USER_KEY" >>$PROFILE_CONF
  716.     echo "YADWIRE_NETWORK_ID=$YADWIRE_NETWORK_ID" >>$PROFILE_CONF
  717.     if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  718.             echo "DNAT_ENABLED=$DNAT_ENABLED" >>$PROFILE_CONF
  719.     fi
  720. }
  721.  
  722. #Update given mac in the mac filtering list (mac_filter.conf)
  723. update_mac_filter_list()
  724. {
  725.     local profile_id macaddress
  726.     profile_id=$1
  727.     macaddress=$2
  728.     MAC_FILTER_CONF=/tmp/profile${profile_id}/mac_filter.conf
  729.     touch $MAC_FILTER_CONF
  730.  
  731.     echo "$macaddress" >>$MAC_FILTER_CONF
  732. }
  733.  
  734. update_resolv_conf()
  735. {
  736.     OLD_IFS=$IFS
  737.     IFS=$(echo -en " \t\n\r")
  738.     PROFILE_RESOLV_CONF="$1/resolv.conf"
  739.     echo > $PROFILE_RESOLV_CONF
  740.     for i in $DNSAddr ; do
  741.         echo nameserver $i >> $PROFILE_RESOLV_CONF
  742.     done
  743.     IFS=$OLD_IFS
  744. }
  745.  
  746. update_udhcpd_conf()
  747. {
  748.     UDHCPD_CONF="$1/udhcpd.conf"
  749.     DHCPD_LEASE_FILE="$1/udhcpd.leases"
  750.     echo "start     $DHCPD_START_IP" > $UDHCPD_CONF
  751.     echo "end       $DHCPD_END_IP" >> $UDHCPD_CONF
  752.     echo "interface     $NAT_INTERNAL_INTERFACE" >>$UDHCPD_CONF
  753.     echo "auto_time     $DHCPD_AUTO_TIME" >> $UDHCPD_CONF
  754.     echo "lease_file    $DHCPD_LEASE_FILE" >> $UDHCPD_CONF
  755.     echo "option dns    $DNSAddr" >> $UDHCPD_CONF
  756.     echo "option subnet $DHCPD_SUBNET_MASK" >> $UDHCPD_CONF
  757.     echo "option router $DHCPD_LOCAL_IP" >> $UDHCPD_CONF
  758.     echo "option lease  $DHCPD_LEASE" >> $UDHCPD_CONF
  759.     echo "appid     $ApSsid"    >> $UDHCPD_CONF
  760.     echo "dhcp_synch_enable 1"  >> $UDHCPD_CONF
  761.     echo "ex_interface  $EXTERNAL_INTERFACE"    >> $UDHCPD_CONF
  762. }
  763.  
  764. update_rad_conf(){
  765.     RAD_CONF="$1/rad.conf"
  766.     BINDADDR=""
  767.     echo "auth_order      radius"   > $RAD_CONF
  768.     echo "login_tries     4"    >> $RAD_CONF
  769.     echo "login_timeout   60"        >> $RAD_CONF
  770.     echo "nologin         $1/nologin"        >> $RAD_CONF
  771.     echo "issue   $1/issue"        >> $RAD_CONF
  772.     echo "authserver  $PORTAL_RADIUS_SERVER_IP:$PORTAL_RADIUS_SERVER_PORT:$PORTAL_RADIUS_SECRET_KEY"   >> $RAD_CONF
  773.     echo "servers  $1/server"        >> $RAD_CONF
  774.     echo "dictionary      /opt/ap/radius/dictionary"        >> $RAD_CONF
  775.     echo "login_radius    $1/radlogin"        >> $RAD_CONF
  776.     echo "radius_timeout  5"        >> $RAD_CONF
  777.     echo "radius_retries  3"        >> $RAD_CONF
  778.     echo "radius_deadtime 0"        >> $RAD_CONF
  779.     echo "default_realm"        >> $RAD_CONF
  780.     echo "mapfile $1/map"        >> $RAD_CONF
  781.     echo "seqfile $1/seqfile"        >> $RAD_CONF
  782.  
  783.     if ! [ -z $PORTAL_RADIUS_SERVER_IP_2 ] && ! [ -z $PORTAL_RADIUS_SERVER_PORT_2 ]; then
  784.         # fallback server ip and port are defined, add them to the config
  785.         echo "authserver  $PORTAL_RADIUS_SERVER_IP_2:$PORTAL_RADIUS_SERVER_PORT_2:$PORTAL_RADIUS_SECRET_KEY_2"   >> $RAD_CONF
  786.     fi
  787.  
  788.     if ! [ -z $PORTAL_RADIUS_ACCT_ENABLED ] && [ $PORTAL_RADIUS_ACCT_ENABLED -eq 1 ]; then # TODO: Check what should be the correct truth value
  789.         echo "acctserver  $PORTAL_RADIUS_ACCT_SERVER_IP:$PORTAL_RADIUS_ACCT_SERVER_PORT:$PORTAL_RADIUS_ACCT_SECRET_KEY" >> $RAD_CONF
  790.         if ! [ -z $PORTAL_RADIUS_ACCT_SERVER_IP_2 ] && ! [ -z $PORTAL_RADIUS_ACCT_SERVER_PORT_2 ]; then
  791.             echo "acctserver  $PORTAL_RADIUS_ACCT_SERVER_IP_2:$PORTAL_RADIUS_ACCT_SERVER_PORT_2:$PORTAL_RADIUS_ACCT_SECRET_KEY_2" >> $RAD_CONF
  792.         fi
  793.     else
  794.         # libradiusclient segfaults without an acct_server entry
  795.         echo "acctserver     $PORTAL_RADIUS_SERVER_IP:$PORTAL_RADIUS_SERVER_PORT:$PORTAL_RADIUS_SECRET_KEY"        >> $RAD_CONF
  796.     fi
  797.     echo "bindaddr $BINDADDR"        >> $RAD_CONF
  798.  
  799. }
  800.  
  801. update_rad_attr_conf(){
  802.     RAD_ATTR_CONF="$1/rad_attr.conf"
  803.     if [ "$PORTAL_RADIUS_NAS_ID" = "" ]; then
  804.         PORTAL_RADIUS_NAS_ID="%m-%s"
  805.     fi
  806.     PORTAL_RADIUS_NAS_ID=`/opt/ap/stringhandler "${PORTAL_RADIUS_NAS_ID}" 252  -r%m:"$ETH_MAC" -r%s:"$ssid" -r%n:"$device_name" -r%l:"$location_identifier"`
  807.  
  808.     echo "nas_id=$PORTAL_RADIUS_NAS_ID" > $RAD_ATTR_CONF
  809.     echo "nas_port_type=19" >> $RAD_ATTR_CONF
  810.     if [ "$PORTAL_RADIUS_CALLED_STATION_ID" = "" ]; then
  811.         PORTAL_RADIUS_CALLED_STATION_ID="%m-%s"
  812.     fi
  813.     PORTAL_RADIUS_CALLED_STATION_ID=`/opt/ap/stringhandler "${PORTAL_RADIUS_CALLED_STATION_ID}" 252  -r%m:"$ETH_MAC" -r%s:"$ssid" -r%n:"$device_name" -r%l:"$location_identifier"`
  814.     echo "called_station_id=$PORTAL_RADIUS_CALLED_STATION_ID" >> $RAD_ATTR_CONF
  815. }
  816.  
  817. update_wgarden_conf_firewall()
  818. {
  819.         profile_id=$1
  820.         rule_prefix="FW"$profile_id"_RULE"$rule_id":"
  821.         WGARDEN_CONF=/tmp/profile`expr $profile_id`/wgarden.conf
  822.         touch $WGARDEN_CONF
  823.  
  824.         echo "#FIREWAL_RULE_$rule_id -----------------------------------------------------------------------" >> $WGARDEN_CONF
  825.         echo ""$rule_prefix"InitAction=/opt/ap/fw_action.sh init $profile_id $rule_id" >> $WGARDEN_CONF
  826.         echo ""$rule_prefix"AddAction=/opt/ap/fw_action.sh add $profile_id $rule_id $protocol $port $direction $action %s" >> $WGARDEN_CONF
  827.         echo ""$rule_prefix"DelAction=/opt/ap/fw_action.sh del $profile_id $rule_id $protocol $port $direction $action %s" >> $WGARDEN_CONF
  828.  
  829.         #Function returns Networks and Domains seperated in different variables
  830.         create_network_lists "$target"
  831.         echo ""$rule_prefix"networks=$Networks" >> $WGARDEN_CONF
  832.         echo ""$rule_prefix"domains=$Domains" >> $WGARDEN_CONF
  833. }
  834.  
  835. #arg1 = list of hosts to allow
  836. #arg2 = profile id for wgarden file
  837. #arg3 = wgarden file to input walled garden classes
  838. #arg4 = action file to input in wgarden.conf
  839. #arg5 = prefix for action in wgarden.conf
  840. update_wgarden_file()
  841. {
  842.     local Allowed_hosts="$1"
  843.     local profile_id="$2"
  844.     local WGARDEN_CONF="$3"
  845.     local action_file="$4"
  846.     local action_prefix="$5"
  847.     local wg_rule_prefix="$6"
  848.  
  849.     local count=1
  850.     local http_networks=""
  851.     local http_domains=""
  852.     local ip=""
  853.     local ports=""
  854.     local domain=""
  855.  
  856.     local is_network=""
  857.     local i
  858.  
  859.     OLD_IFS=$IFS
  860.     IFS=$(echo -en " \t\n\r")
  861.     for i in $Allowed_hosts; do
  862.         #remove port for iter
  863.         host=`echo $i | awk -F ":" '{print $1}' | xargs`
  864.             ports=`echo $i | awk -F ":" '{print $2}' | xargs`
  865.  
  866.         if (echo $host | grep '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\(\/[0-9]\{1,2\}\)\?$' > /dev/null) then
  867.             is_network="1"
  868.         else
  869.             is_network="0"
  870.         fi
  871.  
  872.                 if [ "$ports" = "" ]; then
  873.             if [ "$is_network" = "1" ]; then
  874.                 echo adding ip [$host] to http list
  875.                             http_networks="$http_networks $host"
  876.             else
  877.                         echo adding domain [$host] to http list
  878.                             http_domains="$http_domains $host"
  879.             fi
  880.                         continue
  881.                 fi
  882.                 echo "$wg_rule_prefix$count:InitAction=$action_file "$action_prefix"init $profile_id" >> $WGARDEN_CONF
  883.                 echo "$wg_rule_prefix$count:AddAction=$action_file "$action_prefix"add $profile_id %s $ports" >> $WGARDEN_CONF
  884.                 echo "$wg_rule_prefix$count:DelAction=$action_file "$action_prefix"del $profile_id %s $ports" >> $WGARDEN_CONF
  885.  
  886.         if [ "$is_network" = "1" ]; then
  887.                     echo "$wg_rule_prefix$count:networks=$host" >> $WGARDEN_CONF
  888.                     echo "$wg_rule_prefix$count:domains=""" >> $WGARDEN_CONF
  889.         else
  890.             echo "$wg_rule_prefix$count:networks=""" >> $WGARDEN_CONF
  891.             echo "$wg_rule_prefix$count:domains=$host" >> $WGARDEN_CONF
  892.         fi
  893.  
  894.                 count=`expr $count + 1`
  895.     done
  896.     IFS=$OLD_IFS
  897.  
  898.         if [ "$http_networks" != "" -o "$http_domains" != "" ]; then
  899.                 echo "WG:InitAction=$action_file "$action_prefix"init $profile_id" >> $WGARDEN_CONF
  900.                 echo "WG:AddAction=$action_file "$action_prefix"add $profile_id %s 80,443" >> $WGARDEN_CONF
  901.                 echo "WG:DelAction=$action_file "$action_prefix"del $profile_id %s 80,443" >> $WGARDEN_CONF
  902.                 echo "WG:networks=$http_networks" >> $WGARDEN_CONF
  903.                 echo "WG:domains=$http_domains" >> $WGARDEN_CONF
  904.         fi
  905.  
  906. }
  907.  
  908. update_nat_conf()
  909. {
  910.     NAT_CONF=$1/nat.conf
  911.     echo "#Autogenerated NAT configuration" > $NAT_CONF
  912.     echo "ExternalDevice=$EXTERNAL_INTERFACE" >>$NAT_CONF
  913.     echo "InternalDevice=$NAT_INTERNAL_INTERFACE" >>$NAT_CONF
  914.     echo "NAT_VLANID=$NAT_VLANID" >> $NAT_CONF
  915.     echo "DHCPD_LOCAL_IP=$DHCPD_LOCAL_IP" >> $NAT_CONF
  916.     echo "DHCPD_SUBNET_MASK=$DHCPD_SUBNET_MASK" >> $NAT_CONF
  917.     echo "ENABLE_WIRED_GUEST=$2" >> $NAT_CONF
  918. }
  919.  
  920. update_portal_conf()
  921. {
  922.     PORTAL_CONF=$1/portal.conf
  923.     echo "#Autogenerated portal configuration" > $PORTAL_CONF
  924.     echo "GatewayPort=$NOCAT_PORT" >> $PORTAL_CONF
  925.     echo "PORTAL_BUNDLE_MD5SUM=$PORTAL_BUNDLE_MD5SUM" >> $PORTAL_CONF
  926.     echo "PORTAL_BUNDLE_URL='$PORTAL_BUNDLE_URL'" >> $PORTAL_CONF
  927.     echo "DNSAddr='$DNSAddr'" >> $PORTAL_CONF
  928.     echo "wgdQueueNo=$profile_id" >> $PORTAL_CONF
  929. }
  930.  
  931. update_nocat_conf()
  932. {
  933.     NOCAT_CONF=$1/nocat.conf
  934.     #Setting static portion of $NOCAT_CONF
  935.     echo  > $NOCAT_CONF
  936.     echo "GatewayMode     Open" >>$NOCAT_CONF
  937.     if [ "$SSID_IS_PORTAL_CONFIGURED" != "1"  ];then
  938.         echo "DocumentRoot  /opt/nocatsplash/htdocs" >>$NOCAT_CONF
  939.         echo "SplashForm      $EXTERNAL_PORTAL_URL" >> $NOCAT_CONF
  940.     else
  941.         echo "DocumentRoot  $1/htdocs" >>$NOCAT_CONF
  942.         echo "SplashForm      index.html" >>$NOCAT_CONF
  943.     fi
  944.     if [ "$PORTAL_INTERNET_DOWN_ENABLED" = "1" ]; then
  945.         echo "InternetDownForm      NoInternet.html" >>$NOCAT_CONF
  946.         echo "PORTAL_INTERNET_DOWN_ENABLED      1" >>$NOCAT_CONF
  947.     fi
  948.     echo "GatewayPort    $NOCAT_PORT" >> $NOCAT_CONF
  949.     echo "GatewayAddr    $DHCPD_LOCAL_IP" >> $NOCAT_CONF
  950.  
  951.     #Setting dynamic portion of $NOCAT_CONF
  952.     echo "LoginTimeout    $LoginTimeout " >> $NOCAT_CONF
  953.     echo "BlackoutTime    $BlackoutTime " >> $NOCAT_CONF
  954.     echo "HomePage    $Homepage " >> $NOCAT_CONF
  955.     echo "ProfileId    $profile_id " >> $NOCAT_CONF
  956.     echo "ApMac $ETH_MAC" >> $NOCAT_CONF
  957.     echo "ApRebootCount $AP_REBOOT_COUNT" >> $NOCAT_CONF
  958.     echo "ApMacWithoutColon $AP_MAC_WITHOUT_COLON" >> $NOCAT_CONF
  959.     echo "ApSsid    $ApSsid"    >> $NOCAT_CONF
  960.     echo "ExternalInterface $ExternalInterface" >> $NOCAT_CONF
  961.     echo "SplashlessRoamingEnabled $SPLASHLESS_ROAMING_ENABLED" >> $NOCAT_CONF
  962.     echo "OperatingMode $SSID_IS_PORTAL_CONFIGURED "  >> $NOCAT_CONF
  963.     echo "Authenticator /opt/ap/radius/radius_client" >> $NOCAT_CONF
  964.     echo "Authenticator_conf_dir  $1"   >> $NOCAT_CONF
  965.     echo "PORTAL_SECRET_KEY     $PORTAL_SECRET_KEY" >> $NOCAT_CONF
  966.     echo "PORTAL_SERVICE_ID         $PORTAL_SERVICE_ID" >> $NOCAT_CONF
  967.     echo "VALIDATE_PORTAL    $VALIDATE_PORTAL" >> $NOCAT_CONF
  968.     echo "REQUEST_TYPE_TO_PORTAL     $REQUEST_TYPE_TO_PORTAL" >> $NOCAT_CONF
  969.     echo "SERVICE_ID_TO_PORTAL     $SERVICE_ID_TO_PORTAL" >> $NOCAT_CONF
  970.     echo "CHALLENGE_TO_PORTAL   $CHALLENGE_TO_PORTAL" >> $NOCAT_CONF
  971.     echo "FAILURE_COUNT_TO_PORTAL   $FAILURE_COUNT_TO_PORTAL" >> $NOCAT_CONF
  972.     echo "LOGIN_URL_TO_PORTAL   $LOGIN_URL_TO_PORTAL" >> $NOCAT_CONF
  973.     echo "LOGOFF_URL_TO_PORTAL  $LOGOFF_URL_TO_PORTAL" >> $NOCAT_CONF
  974.     echo "BLACKOUT_TIME_TO_PORTAL   $BLACKOUT_TIME_TO_PORTAL" >> $NOCAT_CONF
  975.     echo "CHALLENGE_FROM_PORTAL"    $CHALLENGE_FROM_PORTAL >> $NOCAT_CONF
  976.     echo "RESPONSE_TYPE_FROM_PORTAL     $RESPONSE_TYPE_FROM_PORTAL" >> $NOCAT_CONF
  977.     echo "CHALLENGE_RESPONSE_FROM_PORTAL    $CHALLENGE_RESPONSE_FROM_PORTAL" >> $NOCAT_CONF
  978.     echo "REDIRECT_URL_FROM_PORTAL  $REDIRECT_URL_FROM_PORTAL" >> $NOCAT_CONF
  979.     echo "SESSION_TIMEOUT_FROM_PORTAL    $SESSION_TIMEOUT_FROM_PORTAL" >> $NOCAT_CONF
  980.         echo "BLACKOUT_TIME_FROM_PORTAL     blackout_time"   >> $NOCAT_CONF
  981.     echo "USERNAME_FROM_PORTAL   $USERNAME_FROM_PORTAL" >> $NOCAT_CONF
  982.     echo "PASSWORD_FROM_PORTAL  $PASSWORD_FROM_PORTAL" >> $NOCAT_CONF
  983.     echo "CLIENT_MAC_TO_PORTAL      $CLIENT_MAC_TO_PORTAL" >> $NOCAT_CONF
  984.     echo "AP_MAC_TO_PORTAL  $AP_MAC_TO_PORTAL" >> $NOCAT_CONF
  985.     echo "AP_IP_TO_PORTAL  $AP_IP_TO_PORTAL" >> $NOCAT_CONF
  986.     echo "AP_PORT_TO_PORTAL  $AP_PORT_TO_PORTAL" >> $NOCAT_CONF
  987.         echo "AP_SSID_TO_PORTAL     ap_ssid"   >> $NOCAT_CONF
  988.     echo "USER_URL_TO_PORTAL         $USER_URL_TO_PORTAL" >> $NOCAT_CONF
  989.     echo "VAP_LIST  $VAP_LIST" >> $NOCAT_CONF
  990.     echo "ACCOUNTING_ENABLED $PORTAL_RADIUS_ACCT_ENABLED" >> $NOCAT_CONF
  991.     echo "ACCOUNTING_INTERVAL $PORTAL_RADIUS_ACCT_INTERVAL" >> $NOCAT_CONF
  992.     echo "PER_USER_BANDWIDTH_ENABLED $per_user_bandwidth_enable" >> $NOCAT_CONF
  993.     echo "IAPC_THROUGH_SENSORD $iapc_through_sensord" >> $NOCAT_CONF
  994.     echo "ENA_REMOTE_BRIDGING $ena_remote_bridging" >> $NOCAT_CONF
  995.     echo "COMM_VLAN $comm_vlan" >> $NOCAT_CONF
  996.     echo "SEND_RADIUS_PARAMS send_radius_params" >> $NOCAT_CONF
  997.  
  998.     SHOWROOMING_SUPPORTED=0
  999.     if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  1000.         if [ "$SSID_IS_PORTAL_CONFIGURED" = "2" -o "$SSID_IS_PORTAL_CONFIGURED" = "3" ];then
  1001.             SHOWROOMING_SUPPORTED=1
  1002.         fi
  1003.     else
  1004.         SHOWROOMING_SUPPORTED=0
  1005.     fi
  1006.  
  1007.     if [ "$SHOWROOMING_SUPPORTED" = "1" ]; then
  1008.         echo "SHOWROOMING_SUPPORTED $SHOWROOMING_SUPPORTED" >> $NOCAT_CONF
  1009.         echo "SHOWROOMING_CONF_FILE /tmp/profile$profile_id/showrooming.conf" >> $NOCAT_CONF
  1010.         echo "SHOWROOMING_SCRIPT_FILE /opt/ap/showrooming.sh" >> $NOCAT_CONF
  1011.         echo "WGARDEN_CONF_FILE /tmp/profile$profile_id/client_wgarden.conf" >> $NOCAT_CONF
  1012.         echo "WGARDEN_PID_FILE /tmp/profile$profile_id/wgd.pid" >> $NOCAT_CONF
  1013.     fi
  1014.     # If AllowedAuthSitesHosts parameter is blank i.e. No domains have been added in Auth Sites,
  1015.     # it indicates that Gate1 is always open,
  1016.     # else gate1 is closed
  1017.     if [ "$AllowedAuthSitesHosts" = "" ] ; then
  1018.         echo "PORTAL_GATE1_AUTH 0" >>$NOCAT_CONF
  1019.     else
  1020.         echo "PORTAL_GATE1_AUTH 1" >>$NOCAT_CONF
  1021.     fi
  1022. }
  1023.  
  1024. update_HS20_parameter()
  1025. {
  1026.     #valid only when 802.1x (EAP) is present with hs20 vap enabled
  1027.     if [ "$2" = "EAP" -a "$3" = "1" ]; then
  1028.         echo "$4" >> $1
  1029.         fi
  1030. }
  1031.  
  1032. create_network_lists()
  1033. {
  1034.     local netlist=""
  1035.     local domainlist=""
  1036.     local i
  1037.  
  1038.     OLD_IFS=$IFS
  1039.     IFS=$(echo -en " \t\n\r")
  1040.     for i in $1; do
  1041.         if (echo $i | grep '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\(\/[0-9]\{1,2\}\)\?$' > /dev/null) then
  1042.             if [ -z "$netlist" ]; then
  1043.                 netlist="$i"
  1044.             else
  1045.                 netlist="$netlist $i"
  1046.             fi
  1047.         else
  1048.             if [ -z "$domainlist" ]; then
  1049.                 domainlist="$i"
  1050.             else
  1051.                 domainlist="$domainlist $i"
  1052.             fi
  1053.         fi
  1054.     done
  1055.  
  1056.     IFS=$OLD_IFS
  1057.     Networks=$netlist
  1058.     Domains=$domainlist
  1059. }
  1060.  
  1061. check_wep_configured()
  1062. {
  1063.     profile_id=$2
  1064.     radio_id_1=$3
  1065.     radio_id_2=$4
  1066.  
  1067.     wep_conf_profile_id_1=`cat /tmp/radio$radio_id_1/wep_configured | xargs`
  1068.     if [ "$radio_id_1" != "" -a "$radio_id_2" != "" ]; then
  1069.         wep_conf_profile_id_2=`cat /tmp/radio$radio_id_2/wep_configured | xargs`
  1070.         ## Profile on both the radios
  1071.         if [ "$profile_id" != "$wep_conf_profile_id_1" -a "$profile_id" != "$wep_conf_profile_id_2" -a \
  1072.             "$wep_conf_profile_id_1" != "" -a "$wep_conf_profile_id_2" != "" ]; then
  1073.             ## Both the radios have one WEP profile on it.
  1074.             ## As we can have only _one_ WEP profile on each radio,
  1075.             ## this profile can't be configured at all.
  1076.             echo "WEP cannot be confiured for profile [$profile_id]"
  1077.             return 1
  1078.         elif [ "$profile_id" != "$wep_conf_profile_id_1" -a "$wep_conf_profile_id_1" != "" ]; then
  1079.             ## radio_id_1 taken, use only radio_id_2
  1080.             replace_string_in_a_file $1 "RADIO_ID=$radio_id_1,$radio_id_2" \
  1081.                 "RADIO_ID=$radio_id_2"
  1082.             echo "WEP cannot be confiured for profile [$profile_id] on radio $radio_id_1"
  1083.         elif [ "$profile_id" != "$wep_conf_profile_id_2" -a "$wep_conf_profile_id_2" != "" ]; then
  1084.             ## radio_id_2 taken, use only radio_id_1
  1085.             replace_string_in_a_file $1 "RADIO_ID=$radio_id_1,$radio_id_2" \
  1086.                 "RADIO_ID=$radio_id_1"
  1087.             echo "WEP cannot be confiured for profile [$profile_id] on radio $radio_id_1"
  1088.         fi
  1089.     else
  1090.         ## Profile on only one radio
  1091.         if [ "$radio_id_1" != "" ]; then
  1092.             if [ "$profile_id" != "$wep_conf_profile_id_1" -a "$wep_conf_profile_id_1" != "" ]; then
  1093.                 echo "WEP cannot be confiured for profile [$profile_id]"
  1094.                 return 1
  1095.             fi
  1096.         fi
  1097.     fi
  1098.     return 0
  1099. }
  1100.  
  1101. check_for_dynamic_vlan()
  1102. {
  1103.     if [ -e "/tmp/used_global_numbers" ];then
  1104.         COUNT_DYNAMIC_VLAN_SSID=`cat /tmp/used_global_numbers | grep "^COUNT_DYNAMIC_VLAN_SSID=" | awk -F "=" '{print $2}' | xargs` 2>/dev/null
  1105.         if [ -z "$COUNT_DYNAMIC_VLAN_SSID" ];then
  1106.             echo "COUNT_DYNAMIC_VLAN_SSID=1" >> /tmp/used_global_numbers
  1107.             return 1
  1108.         fi
  1109.         if [ $COUNT_DYNAMIC_VLAN_SSID -lt 4 ]; then
  1110.             COUNT_DYNAMIC_VLAN_SSID=`expr $COUNT_DYNAMIC_VLAN_SSID + 1`
  1111.             sed -i "s/COUNT_DYNAMIC_VLAN_SSID=.*/COUNT_DYNAMIC_VLAN_SSID=${COUNT_DYNAMIC_VLAN_SSID}/g" /tmp/used_global_numbers
  1112.             return 1
  1113.         fi
  1114.         return 0
  1115.     fi
  1116.     echo "COUNT_DYNAMIC_VLAN_SSID=1" > /tmp/used_global_numbers
  1117.     return 1
  1118. }
  1119.  
  1120. process_ssid_profile()
  1121. {
  1122.     local this_profile_nat
  1123.     local ena_ap_okc
  1124.     local ena_ap_coa
  1125.     local ena_dynamic_vlan
  1126.     local ena_ap_preauth
  1127.     local ap_secfile_param
  1128.     local radio_id
  1129.     local nat_config_found
  1130.     local vap_count
  1131.     local enable_wired_guest
  1132.     local ena_per_user_bandwidth_download
  1133.     local ena_per_user_bandwidth_upload
  1134.  
  1135.     local dynamic_vlan_list
  1136.         local hs20_vap
  1137.         local cellular_networks_list
  1138.         local domain_names_list
  1139.     local service_vlan_list
  1140.     # To invalidate values of last ssid profile in ap.conf
  1141.     init_profile_var
  1142.  
  1143.     # need outfile funda like radio handling
  1144.  
  1145.     profile_id=`cat $1 | grep SSID_PROFILE_ID | xargs | cut -d "=" -f2`
  1146.     #create profile dir in /tmp/. It contains all Profile related conf files and logs
  1147.     PROFILE_DIR="/tmp/profile$CURRENT_SECTION_ID"
  1148.     ACCT_RAD_CONF="$PROFILE_DIR/rad.conf"
  1149.     this_profile_nat=0
  1150.     vap_count=0
  1151.     enable_wired_guest=0
  1152.  
  1153.     ena_samog_mab=""
  1154.     ena_ap_okc=0
  1155.     ena_ap_coa=0
  1156.     ena_dynamic_vlan=0
  1157.     ena_ap_preauth=0
  1158.     ena_ap_acct=0
  1159.     iapc_through_sensord=0
  1160.     ap_secfile_param=""
  1161.     radio_id=""
  1162.     more_radio_id=""
  1163.     skip_radio_id=""
  1164.     ena_per_user_bandwidth_download=""
  1165.     ena_per_user_bandwidth_upload=""
  1166.         hs20_vap=""
  1167.         cellular_networks_list=""
  1168.         domain_names_list=""
  1169.     hs20_osen_enabled=0
  1170.     hs20_icon_present=0
  1171.         hs20_release=0 #default to release 1
  1172.     qos_map_set_exceptions=""
  1173.     qos_map_set_mandatory=""
  1174.     APP_VISIBILITY_ENABLED=0
  1175.    
  1176.     #comm_vlan=`grep communication_vlan /opt/sensor/discovery.conf | cut -d "=" -f2 | xargs`
  1177.     #if [ $comm_vlan == 0 ] ; then
  1178.         #        comm_vlan="br0"
  1179.         #else
  1180.         #        comm_vlan="br0."$comm_vlan
  1181.         #fi
  1182.  
  1183.     line=`cat ${1} | grep RADIO_ID`
  1184.     line_2=`cat ${1} | grep AP_SEC_MODE`
  1185.     radio=`echo -E "$line" | cut -f2- -d"="`
  1186.     sec_mode=`echo -E "$line_2" | cut -f2- -d"="`
  1187.  
  1188.     radio_id_1=`echo $radio | awk -F "," '{print $1}' | xargs`
  1189.     radio_id_2=`echo $radio | awk -F "," '{print $2}' | xargs`
  1190.  
  1191.     radio_id_1=`expr $radio_id_1 - 1`
  1192.     if [ "$radio_id_2" != "" ]; then
  1193.         radio_id_2=`expr $radio_id_2 - 1`
  1194.     fi
  1195.  
  1196.     if [ "$sec_mode" = "1" ]; then
  1197.         check_wep_configured $1 $profile_id $radio_id_1 $radio_id_2
  1198.         if [ $? -eq 1 ]; then
  1199.             return 1
  1200.         fi
  1201.     fi
  1202.  
  1203.     if [ "$CURRENT_SECTION_CMD" = "F_MOD" ]; then
  1204.         rm -f $PROFILE_DIR/modified.conf
  1205.         OUT_FILE=`echo $PROFILE_DIR/modified.conf`
  1206.     else
  1207.         if [ -d "$PROFILE_DIR" ]; then
  1208.             rm -rf $PROFILE_DIR
  1209.         fi
  1210.         mkdir $PROFILE_DIR >/dev/null 2>&1
  1211.         OUT_FILE=`echo $PROFILE_DIR/profile.conf`
  1212.     fi
  1213.  
  1214.     echo "" > $OUT_FILE
  1215.  
  1216.     while read -r line
  1217.     do
  1218.         param=`echo -E "$line" | cut -f1 -d"=" | xargs`
  1219.         value=`echo -E "$line" | cut -f2- -d"="`
  1220.  
  1221.         if [ -z "$param" ];then
  1222.             echo "Paramname blank in line ($line). Ignoring.."
  1223.             continue
  1224.         fi
  1225.  
  1226.         case $param in
  1227.             "VAP_IS_GUEST_SSID")
  1228.                 #VAP_IS_GUEST_SSID in new workflow indicates that this profile is NAT enabled.Name was not changed
  1229.                 #to keep parser backward(server) compatible.IS_PORTAL_CONFIGURED indicats that the profile is GUEST
  1230.                 if [ "$value" = "1" ];then
  1231.                     this_profile_nat=1
  1232.                     echo "IS_VAP_NAT=1" >> $OUT_FILE
  1233.                 else
  1234.                     echo "IS_VAP_NAT=0" >> $OUT_FILE
  1235.                 fi
  1236.                 ;;
  1237.  
  1238.             "AP_SSID")
  1239.                 ApSsid="`extract_value \"$line\" AP_SSID`"
  1240.                 tempssid=`echo "$ApSsid" | sed "s/'/'\\\\\''/g"`
  1241.                 echo "AP_SSID='$tempssid'" >> $OUT_FILE
  1242.                 ssid=$ApSsid
  1243.                 ;;
  1244.  
  1245.             "SSID_PROFILE_ID")
  1246.                 SSID_PROFILE_ID=$value
  1247.                 ;;
  1248.             "HIDESSID_BROADCAST")
  1249.                 echo "HIDESSID_ENABLE=$value" >> $OUT_FILE
  1250.                 ;;
  1251.             "WMM_ENABLE")
  1252.                 WMM_ENABLE="${value:='1'}"
  1253.                 ;;
  1254.             "ISOLATION_ENABLE")
  1255.                 [ "$value" = "0" ] && val1=1 || val1=0
  1256.                 echo "ISOLATION_ENABLE=$val1" >> $OUT_FILE
  1257.                 assoc_broadcast_enable=$val1
  1258.                 ;;
  1259.             "IAPC_ENABLE")
  1260.                 [ "$value" = "0" ] && val1=0 || val1=1
  1261.                 echo "IAPC_ENABLE=$val1" >> $OUT_FILE
  1262.                 iapc_through_sensord=$val1
  1263.                 ;;
  1264.             "AP_VLAN")
  1265.                 sanitize_vlan_id $value
  1266.                 vlan_id=$?
  1267.                 ;;
  1268.             "REMOTE_BRIDGING_ENABLED")
  1269.                 if [ "$value" = "1" ];then
  1270.                     ena_remote_bridging=1
  1271.                 fi
  1272.                 ;;
  1273.             "NETWORK_PROFILE_ID")
  1274.                 network_profile_id=$value
  1275.                 echo "NETWORK_PROFILE_ID=$value" >> $OUT_FILE
  1276.                 ;;
  1277.             "DYNAMIC_VLAN_ENABLED")
  1278.                 if [ "$value" = "1" ];then
  1279.                     ena_dynamic_vlan=1
  1280.                 fi
  1281.                 ;;
  1282.             "DYNAMIC_VLAN_LIST")
  1283.                 dynamic_vlan_list=$value
  1284.                 ;;
  1285.             "TRAFFIC_SHAPING_STA_ENABLE")
  1286.                 if [ "$value" = "1" ];then
  1287.                     per_user_bandwidth_enable=1
  1288.                 fi
  1289.                 ;;
  1290.             "TRAFFIC_SHAPING_STA_UPLOAD")
  1291.                 ena_per_user_bandwidth_upload=$value
  1292.                 ;;
  1293.             "TRAFFIC_SHAPING_STA_DOWNLOAD")
  1294.                 ena_per_user_bandwidth_download=$value
  1295.                 ;;
  1296.             "AP_SEC_MODE")
  1297.                 case $value in
  1298.                     0)  ap_sec_mode="None"
  1299.                         ap_cypher="0"
  1300.                         ap_wpa="0"
  1301.                         ;;
  1302.                     1)  ap_sec_mode="WEP"
  1303.                         ap_cypher="0"
  1304.                         ap_wpa="0"
  1305.                         ;;
  1306.                     2)  ap_sec_mode="WPA"
  1307.                         ap_cypher="TKIP"
  1308.                         ap_wpa="1"
  1309.                         ;;
  1310.                     3)  ap_sec_mode="WPA"
  1311.                         ap_cypher="CCMP"
  1312.                         ap_wpa="2"
  1313.                         ;;
  1314.                     4)  ap_sec_mode="WPA"
  1315.                         ap_cypher="TKIP CCMP"
  1316.                         ap_wpa="3"
  1317.                         ;;
  1318.                     5)  ap_sec_mode="WPA" # Hotspot2.0 OSEN
  1319.                                                 ap_cypher="CCMP"
  1320.                                                 ap_wpa="2"
  1321.                         hs20_osen_enabled=1
  1322.                                                 ;;
  1323.                     *)  ap_sec_mode=None
  1324.                         ap_cypher="0"
  1325.                         ap_wpa="0"
  1326.                         ;;
  1327.                 esac
  1328.                 echo "AP_SECMODE=$ap_sec_mode" >> $OUT_FILE
  1329.                 echo "HS20_OSEN_ENABLED=$hs20_osen_enabled" >> $OUT_FILE
  1330.                 wpa=$ap_wpa
  1331.                 wpa_pairwise=$ap_cypher
  1332.                 ;;
  1333.             "AP_WEP_TYPE")
  1334.                 ap_wep_type="$value"
  1335.                 ;;
  1336.             "AP_KEY_TYPE")
  1337.                 echo "AP_KEY_TYPE=${value:='ASCII'}" >> $OUT_FILE
  1338.                 ;;
  1339.             "AP_WEP_KEY")
  1340.                 wepkey="`extract_value \"$line\" AP_WEP_KEY`"
  1341.                 wepkey_1=`echo "$wepkey" | sed "s/'/'\\\\\''/g"`
  1342.                 ;;
  1343.             "AP_WEP_MODE")
  1344.                 ap_wep_mode="$value"
  1345.                 ;;
  1346.             "AP_SECFILE")
  1347.                 echo "AP_SECFILE=${value:='PSK'}" >> $OUT_FILE
  1348.                 ap_secfile_param="$value"
  1349.                 ;;
  1350.             "PSK_KEY")
  1351.                 wpa_psk=${value:=''}
  1352.                 wpa_passphrase=${value:=''}
  1353.                 ;;
  1354.             "MESH_PSK_KEY")
  1355.                 mesh_passphrase=${value:=''}
  1356.                 ;;
  1357.             "AP_AUTH_SERVER")
  1358.                 auth_server_addr=${value:=''}
  1359.                 ;;
  1360.             "AP_AUTH_PORT")
  1361.                 auth_server_port=${value:='1919'}
  1362.                 ;;
  1363.             "AP_AUTH_SECRET")
  1364.                 auth_server_shared_secret=${value:=''}
  1365.                 ;;
  1366.             "AP_OKC_ENABLED")
  1367.                 if [ "$value" = "1" ];then
  1368.                     ena_ap_okc=1
  1369.                 fi
  1370.                 ;;
  1371.             "AP_COA_ENABLED")
  1372.                 if [ "$value" = "1" ];then
  1373.                     ena_ap_coa=1
  1374.                 fi
  1375.                 ;;
  1376.             "AP_AUTH_SERVER2")
  1377.                 value=`echo $value | xargs`
  1378.                 auth_server_addr_2=${value:=''}
  1379.                 ;;
  1380.             "AP_AUTH_PORT2")
  1381.                 value=`echo $value | xargs`
  1382.                 auth_server_port_2=${value:='1919'}
  1383.                 ;;
  1384.             "AP_AUTH_SECRET2")
  1385.                 auth_server_shared_secret_2=${value:=''}
  1386.                 ;;
  1387.             "AP_PREAUTH_ENABLED")
  1388.                 if [ "$value" = "1" ];then
  1389.                     ena_ap_preauth=1
  1390.                 fi
  1391.                 ;;
  1392.             "AP_ACCT_ENABLED")
  1393.                 if [ "$value" = "1" ];then
  1394.                     ena_ap_acct=1
  1395.                 fi
  1396.                 ;;
  1397.             "AP_ACCT_SERVER")
  1398.                 value=`echo $value | xargs`
  1399.                 acct_server_addr="$value"
  1400.                 ;;
  1401.             "AP_ACCT_PORT")
  1402.                 value=`echo $value | xargs`
  1403.                 acct_server_port=${value:=0}
  1404.                 ;;
  1405.             "AP_ACCT_SECRET")
  1406.                 acct_server_shared_secret=${value:=''}
  1407.                 ;;
  1408.             "AP_ACCT_SERVER2")
  1409.                 value=`echo $value | xargs`
  1410.                 acct_server_addr2="$value"
  1411.                 ;;
  1412.             "AP_ACCT_PORT2")
  1413.                 value=`echo $value | xargs`
  1414.                 acct_server_port2=${value:=0}
  1415.                 ;;
  1416.             "AP_ACCT_SECRET2")
  1417.                 acct_server_shared_secret2=${value:=''}
  1418.                 ;;
  1419.             "RADIO_ID")
  1420.                 if [ "$radio_id_2" != "" ]; then
  1421.                     value="$radio_id_1,$radio_id_2"
  1422.                     vap_count=2
  1423.                 else
  1424.                     value="$radio_id_1"
  1425.                     vap_count=1
  1426.                 fi
  1427.                 echo "RADIO_ID=$value" >> $OUT_FILE
  1428.                 ;;
  1429.             "DHCPD_LOCAL_IP")
  1430.                 DHCPD_LOCAL_IP=$value
  1431.                 nat_config_found=1
  1432.                 ;;
  1433.             "DHCPD_SUBNET_MASK")
  1434.                 DHCPD_SUBNET_MASK=$value
  1435.                 ;;
  1436.             "DHCPD_START_IP")
  1437.                 DHCPD_START_IP=$value
  1438.                 ;;
  1439.             "DHCPD_END_IP")
  1440.                 DHCPD_END_IP=$value
  1441.                 ;;
  1442.             "DHCPD_LEASE_TIME")
  1443.                 DHCPD_LEASE=$(($value*60))
  1444.                 ;;
  1445.             "AUTH_TIMEOUT")
  1446.                 LoginTimeout=$(($value*60))
  1447.                 ;;
  1448.             "BLACKOUT_TIME")
  1449.                 BlackoutTime=$(($value*60))
  1450.                 ;;
  1451.             "PORTAL_HOME_PAGE")
  1452.                 Homepage=$value
  1453.                 ;;
  1454.             "DNS_SERVER_LIST")
  1455.                 DNSAddr=$value
  1456.                 ;;
  1457.             "BLOCKED_IP_LIST")
  1458.                 BlockedWebHosts=$value
  1459.                 ;;
  1460.             "EXEMPTED_IP_PORT_LIST")
  1461.                 AllowedWebHosts=$value
  1462.                 ;;
  1463.             "EXEMPTED_IP_LIST")
  1464.                 AllowedWebHosts_old=$value
  1465.                 ;;
  1466.             "EXEMPTED_IP_PORT_LIST_WALLED_GARDEN")
  1467.                 AllowedWalledGardenHosts=$value
  1468.                 ;;
  1469.             "EXEMPTED_IP_PORT_LIST_AUTH_SITES")
  1470.                 AllowedAuthSitesHosts=$value
  1471.                 ;;
  1472.             "SSID_PORTAL_BUNDLE_URL")
  1473.                 PORTAL_BUNDLE_URL=$value
  1474.                 ;;
  1475.             "PORTAL_BUNDLE_MD5SUM")
  1476.                 PORTAL_BUNDLE_MD5SUM="$value"
  1477.                 ;;
  1478.             "AP_IS_PORTAL_CONFIGURED")
  1479.                 SSID_IS_PORTAL_CONFIGURED=$value
  1480.                 ;;
  1481.             "TRAFFIC_SHAPING_UPLOAD")
  1482.                 TRAFFIC_SHAPING_UPLOAD=$value
  1483.                 ;;
  1484.             "TRAFFIC_SHAPING_DOWNLOAD")
  1485.                 TRAFFIC_SHAPING_DOWNLOAD=$value
  1486.                 ;;
  1487.             "MAC_FILTER_ENABLED")
  1488.                 MAC_FILTER_ENABLED=$value
  1489.                 ;;
  1490.             "MAC_FILTER_MACADDRESS")
  1491.                 macaddress="$value"
  1492.                 update_mac_filter_list $profile_id $macaddress
  1493.                 ;;
  1494.             "MAC_FILTER_ACTION")
  1495.                 MAC_FILTER_ACTION=$value
  1496.                 ;;
  1497.             "FIREWALL_ENABLED")
  1498.                 FIREWALL_ENABLED="$value"
  1499.                 ;;
  1500.             "FW_DEFAULT")
  1501.                 FW_DEFAULT="$value"
  1502.                 ;;
  1503.             "FW_RULE_START")
  1504.                 rule_id="$value"
  1505.                 #reinitialize variable before every rule
  1506.                 target=""
  1507.                 protocol=""
  1508.                 port=0
  1509.                 direction=0
  1510.                 action=""
  1511.                 ;;
  1512.             "FW_RULE_END")
  1513.                 update_wgarden_conf_firewall $profile_id
  1514.                 #reinitialize variable after every rule
  1515.                 target=""
  1516.                 protocol=""
  1517.                 port=0
  1518.                 direction=0
  1519.                 action=""
  1520.                 rule_id=""
  1521.                 ;;
  1522.             "TARGET")
  1523.                 if [ "$value" = "" ]; then
  1524.                     target="0.0.0.0/0"
  1525.                 else
  1526.                     target="$value"
  1527.                 fi
  1528.                 ;;
  1529.             "PROTOCOL")
  1530.                 protocol="$value"
  1531.                 ;;
  1532.             "PORT")
  1533.                 if [ "$value" = "" ]; then
  1534.                     port="0"
  1535.                 else
  1536.                     port="$value"
  1537.                 fi
  1538.                 ;;
  1539.             "DIRECTION")
  1540.                 direction="$value"
  1541.                 ;;
  1542.             "ACTION")
  1543.                 action="$value"
  1544.                 ;;
  1545.             "WEBQ_EXEMPT_IP_PORT_LIST")
  1546.                 webq_exempt_list="$value"
  1547.                 ;;
  1548.             "WEBQ_EXEMPT_LIST")
  1549.                 webq_exempt_list_old="$value"
  1550.                 ;;
  1551.             "WEBQ_ENABLED")
  1552.                 WEBQ_ENABLED="$value"
  1553.                 ;;
  1554.             "WEBQ_REDIRECT_URL")
  1555.                 webq_url="$value"
  1556.                 ;;
  1557.             "ENABLE_LIMIT_ON_ASSOC")
  1558.                 echo "ENA_ASSOC_LIMIT=${value:=0}" >> $OUT_FILE
  1559.                 ;;
  1560.             "ASSOC_LIMIT")
  1561.                 sanitize_integer $value 0 127
  1562.                 assoc_limit=$?
  1563.                 if [ "$assoc_limit" -gt "127" ]; then
  1564.                     echo "VAP: Invalid ASSOC_LIMIT ($value). Using Default ASSOC_LIMIT instead."
  1565.                     value="NA"
  1566.                 else
  1567.                     value=$assoc_limit
  1568.                 fi
  1569.                 echo "ASSOC_LIMIT=$value" >> $OUT_FILE
  1570.                 ;;
  1571.             "QOS_SSID_PRIORITY")
  1572.                 echo "QOS_SSID_PRIORITY=$value" >> $OUT_FILE
  1573.                 ;;
  1574.             "QOS_PRIORITY_TYPE")
  1575.                 echo "QOS_PRIORITY_TYPE=$value" >> $OUT_FILE
  1576.                 ;;
  1577.             "QOS_DOWNSTR_MAP")
  1578.                 echo "QOS_DOWNSTR_MAP=$value" >> $OUT_FILE
  1579.                 ;;
  1580.             "QOS_UPSTR_MARK_802_1p")
  1581.                 echo "QOS_UPSTR_MARK_802_1p=$value" >> $OUT_FILE
  1582.                 ;;
  1583.             "QOS_UPSTR_MARK_DSCP_TOS")
  1584.                 echo "QOS_UPSTR_MARK_DSCP_TOS=$value" >> $OUT_FILE
  1585.                 ;;
  1586.             "EXTERNAL_PORTAL_URL")
  1587.                 EXTERNAL_PORTAL_URL="$value"
  1588.                 ;;
  1589.             "PORTAL_SECRET_KEY")
  1590.                 PORTAL_SECRET_KEY="$value"
  1591.                 ;;
  1592.             "PORTAL_SERVICE_ID")
  1593.                 PORTAL_SERVICE_ID="$value"
  1594.                 ;;
  1595.             "VALIDATE_PORTAL")
  1596.                 VALIDATE_PORTAL="$value"
  1597.                 ;;
  1598.             "PORTAL_RADIUS_SERVER_IP")
  1599.                 PORTAL_RADIUS_SERVER_IP="$value"
  1600.                 ;;
  1601.             "PORTAL_RADIUS_SERVER_PORT")
  1602.                 PORTAL_RADIUS_SERVER_PORT="$value"
  1603.                 ;;
  1604.             "PORTAL_RADIUS_SECRET_KEY")
  1605.                 PORTAL_RADIUS_SECRET_KEY="$value"
  1606.                 ;;
  1607.             "PORTAL_RADIUS_SERVER_IP_2")
  1608.                 PORTAL_RADIUS_SERVER_IP_2="$value"
  1609.                 ;;
  1610.             "PORTAL_RADIUS_SERVER_PORT_2")
  1611.                 PORTAL_RADIUS_SERVER_PORT_2="$value"
  1612.                 ;;
  1613.             "PORTAL_RADIUS_SECRET_KEY_2")
  1614.                 PORTAL_RADIUS_SECRET_KEY_2="$value"
  1615.                 ;;
  1616.             "PORTAL_RADIUS_ACCT_ENABLED")
  1617.                 PORTAL_RADIUS_ACCT_ENABLED="$value"
  1618.                 ;;
  1619.             "PORTAL_RADIUS_ACCT_INTERVAL")
  1620.                 PORTAL_RADIUS_ACCT_INTERVAL="$value"
  1621.                 ;;
  1622.             "PORTAL_RADIUS_ACCT_SERVER_IP")
  1623.                 PORTAL_RADIUS_ACCT_SERVER_IP="$value"
  1624.                 ;;
  1625.             "PORTAL_RADIUS_ACCT_SERVER_PORT")
  1626.                 PORTAL_RADIUS_ACCT_SERVER_PORT="$value"
  1627.                 ;;
  1628.             "PORTAL_RADIUS_ACCT_SECRET_KEY")
  1629.                 PORTAL_RADIUS_ACCT_SECRET_KEY="$value"
  1630.                 ;;
  1631.             "PORTAL_RADIUS_ACCT_SERVER_IP_2")
  1632.                 PORTAL_RADIUS_ACCT_SERVER_IP_2="$value"
  1633.                 ;;
  1634.             "PORTAL_RADIUS_ACCT_SERVER_PORT_2")
  1635.                 PORTAL_RADIUS_ACCT_SERVER_PORT_2="$value"
  1636.                 ;;
  1637.             "PORTAL_RADIUS_ACCT_SECRET_KEY_2")
  1638.                 PORTAL_RADIUS_ACCT_SECRET_KEY_2="$value"
  1639.                 ;;
  1640.             "PORTAL_RADIUS_CALLED_STATION_ID")
  1641.                 PORTAL_RADIUS_CALLED_STATION_ID="`extract_value \"$line\" PORTAL_RADIUS_CALLED_STATION_ID`"
  1642.                 tempportalstid=`echo "$PORTAL_RADIUS_CALLED_STATION_ID" | sed "s/'/'\\\\\''/g"`
  1643.                 echo "PORTAL_RADIUS_CALLED_STATION_ID='$tempportalstid'" >> $OUT_FILE
  1644.                 ;;
  1645.             "CALLED_STATION_ID")
  1646.                 called_station_id="`extract_value \"$line\" CALLED_STATION_ID`"
  1647.                 backup_called_station_id="`extract_value \"$line\" CALLED_STATION_ID`"
  1648.                 tempstid=`echo "$called_station_id" | sed "s/'/'\\\\\''/g"`
  1649.                 echo "CALLED_STATION_ID='$tempstid'" >> $OUT_FILE
  1650.                 if [ "$called_station_id" = "" ];then
  1651.                     called_station_id="%m:%s"
  1652.                 fi
  1653.                 called_station_id=`/opt/ap/stringhandler "${called_station_id}" 252  -r%m:"$RFC_ETH_MAC" -r%s:"$ssid" -r%n:"$device_name" -r%l:"$location_identifier"`
  1654.                 ;;
  1655.             "PORTAL_RADIUS_NAS_ID")
  1656.                 PORTAL_RADIUS_NAS_ID="`extract_value \"$line\" PORTAL_RADIUS_NAS_ID`"
  1657.                 tempportalnasid=`echo "$PORTAL_RADIUS_NAS_ID" | sed "s/'/'\\\\\''/g"`
  1658.                 echo "PORTAL_RADIUS_NAS_IDENTIFIER='$tempportalnasid'" >> $OUT_FILE
  1659.                 ;;
  1660.             "REQUEST_TYPE_TO_PORTAL")
  1661.                 REQUEST_TYPE_TO_PORTAL="$value"
  1662.                 ;;
  1663.             "SERVICE_ID_TO_PORTAL")
  1664.                 SERVICE_ID_TO_PORTAL="$value"
  1665.                 ;;
  1666.             "CHALLENGE_TO_PORTAL")
  1667.                 CHALLENGE_TO_PORTAL="$value"
  1668.                 ;;
  1669.             "CLIENT_MAC_TO_PORTAL")
  1670.                 CLIENT_MAC_TO_PORTAL="$value"
  1671.                 ;;
  1672.             "AP_MAC_TO_PORTAL")
  1673.                 AP_MAC_TO_PORTAL="$value"
  1674.                 ;;
  1675.             "AP_IP_TO_PORTAL")
  1676.                 AP_IP_TO_PORTAL="$value"
  1677.                 ;;
  1678.             "AP_PORT_TO_PORTAL")
  1679.                 AP_PORT_TO_PORTAL="$value"
  1680.                 ;;
  1681.             "FAILURE_COUNT_TO_PORTAL")
  1682.                 FAILURE_COUNT_TO_PORTAL="$value"
  1683.                 ;;
  1684.             "USER_URL_TO_PORTAL")
  1685.                 USER_URL_TO_PORTAL="$value"
  1686.                 ;;
  1687.             "LOGIN_URL_TO_PORTAL")
  1688.                 LOGIN_URL_TO_PORTAL="$value"
  1689.                 ;;
  1690.             "LOGOFF_URL_TO_PORTAL")
  1691.                 LOGOFF_URL_TO_PORTAL="$value"
  1692.                 ;;
  1693.             "BLACKOUT_TIME_TO_PORTAL")
  1694.                 BLACKOUT_TIME_TO_PORTAL="$value"
  1695.                 ;;
  1696.             "CHALLENGE_FROM_PORTAL")
  1697.                 CHALLENGE_FROM_PORTAL="$value"
  1698.                 ;;
  1699.             "RESPONSE_TYPE_FROM_PORTAL")
  1700.                 RESPONSE_TYPE_FROM_PORTAL="$value"
  1701.                 ;;
  1702.             "CHALLENGE_RESPONSE_FROM_PORTAL")
  1703.                 CHALLENGE_RESPONSE_FROM_PORTAL="$value"
  1704.                 ;;
  1705.             "REDIRECT_URL_FROM_PORTAL")
  1706.                 REDIRECT_URL_FROM_PORTAL="$value"
  1707.                 ;;
  1708.             "SESSION_TIMEOUT_FROM_PORTAL")
  1709.                 SESSION_TIMEOUT_FROM_PORTAL="$value"
  1710.                 ;;
  1711.             "USERNAME_FROM_PORTAL")
  1712.                 USERNAME_FROM_PORTAL="$value"
  1713.                 ;;
  1714.             "PASSWORD_FROM_PORTAL")
  1715.                 PASSWORD_FROM_PORTAL="$value"
  1716.                 ;;
  1717.             "SPLASHLESS_ROAMING_ENABLED")
  1718.                 SPLASHLESS_ROAMING_ENABLED="$value"
  1719.                 ;;
  1720.             "GRE_REMOTE_ENDPOINT")
  1721.                 GRE_REMOTE_ENDPOINT="$value"
  1722.                 ;;
  1723.             "GRE_KEY")
  1724.                 GRE_KEY="$value"
  1725.                 ;;
  1726.             "GRE_EXEMPTED_IP_LIST")
  1727.                 GRE_EXEMPTED_IP_LIST="$value"
  1728.                 ;;
  1729.             "IS_GRE_CONFIGURED")
  1730.                 IS_GRE_CONFIGURED="$value"
  1731.                 ;;
  1732.             "GRE_TUNNEL_IP")
  1733.                 GRE_TUNNEL_IP="$value"
  1734.                 ;;
  1735.             "CWMENABLE")
  1736.                     echo "CWMENABLE=$value" >> $OUT_FILE
  1737.                 ;;
  1738.             "VAP_MIN_RATE")
  1739.                 expr $value + 0 > /dev/null 2>&1
  1740.                 if [ "$?" = "0" ] ; then
  1741.                     TMP_RATE_VAL="$(expr $value \* 10)"
  1742.                 else
  1743.                     TMP_RATE_VAL="$(echo $value | cut -d '.' -f1)$(echo $value | cut -d '.' -f2 | cut -b 1)"
  1744.                 fi
  1745.                 TMP_RATE_VAL="$(expr $TMP_RATE_VAL / 5)"
  1746.                 if [ "$?" = "0" ] ; then
  1747.                     echo "MIN_RATE=$TMP_RATE_VAL" >> $OUT_FILE
  1748.                 else
  1749.                     echo "MIN_RATE=0" >> $OUT_FILE
  1750.                 fi
  1751.                 ;;
  1752.             "VAP_MAX_RATE")
  1753.                 expr $value + 0 > /dev/null 2>&1
  1754.                 if [ "$?" = "0" ] ; then
  1755.                     TMP_RATE_VAL="$(expr $value \* 10)"
  1756.                 else
  1757.                     TMP_RATE_VAL="$(echo $value | cut -d '.' -f1)$(echo $value | cut -d '.' -f2 | cut -b 1)"
  1758.                 fi
  1759.                 TMP_RATE_VAL="$(expr $TMP_RATE_VAL / 5)"
  1760.                 if [ "$?" = "0" ] ; then
  1761.                     echo "MAX_RATE=$TMP_RATE_VAL" >> $OUT_FILE
  1762.                 else
  1763.                     echo "MAX_RATE=0" >> $OUT_FILE
  1764.                 fi
  1765.                 ;;
  1766.             "VAP_NONLEGACY_MAX_RATE")
  1767.                 echo "NONLEGACY_MAX_RATE=$value" >> $OUT_FILE
  1768.                 ;;
  1769.             "VAP_MCAST_MGMT_RATE")
  1770.                 expr $value + 0 > /dev/null 2>&1
  1771.                 if [ "$?" = "0" ] ; then
  1772.                     TMP_RATE_VAL="$(expr $value \* 10)"
  1773.                 else
  1774.                     TMP_RATE_VAL="$(echo $value | cut -d '.' -f1)$(echo $value | cut -d '.' -f2 | cut -b 1)"
  1775.                 fi
  1776.                 TMP_RATE_VAL="$(expr $TMP_RATE_VAL / 5)"
  1777.                 if [ "$?" = "0" ] ; then
  1778.                     echo "MCAST_MGMT_RATE=$TMP_RATE_VAL" >> $OUT_FILE
  1779.                 else
  1780.                     echo "MCAST_MGMT_RATE=0" >> $OUT_FILE
  1781.                 fi
  1782.                 ;;
  1783.             "ASSOCIATION_ANALYTICS_ENABLED")
  1784.                 if [ -z $value ]; then
  1785.                     value=0
  1786.                 fi
  1787.                 ASSOCIATION_ANALYTICS_ENABLED=$value
  1788.                 echo "ASSOCIATION_ANALYTICS_ENABLED=$value" >> $OUT_FILE
  1789.                 ;;
  1790.             "WIRED_GUEST_ENABLED")
  1791.                 if [ -z $value ]; then
  1792.                     value=0
  1793.                 fi
  1794.                 enable_wired_guest=$value
  1795.                 ;;
  1796.             "BS_BAND_STEERING_ENABLED")
  1797.                 local bs_radios=$(cat ${1} | grep RADIO_ID | cut -d= -f2)
  1798.                 local bs_radios_num=${#bs_radios}
  1799.                 if [ $bs_radios_num -ge 2 ] && [ x$value = x1 ]; then
  1800.                     BS_BAND_STEERING_ENABLED="1"
  1801.                 else
  1802.                     BS_BAND_STEERING_ENABLED="0"
  1803.                 fi
  1804.                 ;;
  1805.             "BS_RSSI_THRESHOLD")
  1806.                 BS_RSSI_THRESHOLD="$value"
  1807.                 ;;
  1808.             "SMART_STEERING_ENABLED")
  1809.                 if [ -z $value ]; then
  1810.                     value=0
  1811.                 fi
  1812.                 echo "SMART_STEERING_ENABLED=$value" >> $OUT_FILE
  1813.                 ;;
  1814.             "ASSOC_CONTROL_ENABLED")
  1815.                 if [ -z $value ]; then
  1816.                     value=0
  1817.                 fi
  1818.                 echo "ASSOC_CONTROL_ENABLED=$value" >> $OUT_FILE
  1819.                 ;;
  1820.             "PORTAL_INTERNET_DOWN_ENABLED")
  1821.                 PORTAL_INTERNET_DOWN_ENABLED="${value:='0'}"
  1822.                 ;;
  1823.             "CONTENT_ANALYTICS_ENABLE")
  1824.                 CONTENT_ANALYTICS_ENABLED="$value"
  1825.                 ;;
  1826.             "APPLICATION_VISIBILITY_ENABLED")
  1827.                 if [ "$APP_VISIBILITY_SUPPORT" = "1" ]; then
  1828.                     APP_VISIBILITY_ENABLED="$value"
  1829.                 else
  1830.                     APP_VISIBILITY_ENABLED=0
  1831.                 fi
  1832.                 ;;
  1833.             "POST_HTTP_DATA_ENABLED")
  1834.                 POST_HTTP_DATA_ENABLED="$value"
  1835.                 if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  1836.                     POST_HTTP_DATA_ENABLED=0
  1837.                 fi
  1838.                 ;;
  1839.             "POST_HTTP_DATA_REQ_BODY")
  1840.                 POST_HTTP_DATA_REQ_BODY="$value"
  1841.                 ;;
  1842.             "POST_HTTP_DATA_UA")
  1843.                 POST_HTTP_DATA_UA="$value"
  1844.                 ;;
  1845.             "POST_HTTP_DATA_REFERER")
  1846.                 POST_HTTP_DATA_REFERER="$value"
  1847.                 ;;
  1848.             "POST_HTTP_DATA_UPLOAD_ON_MEM_THRSLD")
  1849.                 POST_HTTP_DATA_UPLOAD_ON_MEM_THRSLD="$value"
  1850.                 ;;
  1851.             "POST_HTTP_DATA_INTERVAL")
  1852.                 expr $value + 0 > /dev/null 2>&1
  1853.                 if [ "$?" = "0" ] ; then
  1854.                     POST_HTTP_DATA_INTERVAL=$(($value*60))
  1855.                 else
  1856.                     POST_HTTP_DATA_INTERVAL=86400
  1857.                 fi
  1858.  
  1859.                 ;;
  1860.             "POST_HTTP_DATA_SERVER")
  1861.                 POST_HTTP_DATA_SERVER="$value"
  1862.                 ;;
  1863.             "POST_HTTP_DATA_USERNAME")
  1864.                 POST_HTTP_DATA_USERNAME="`extract_value \"$line\" POST_HTTP_DATA_USERNAME`"
  1865.                 tempstring=`echo "$POST_HTTP_DATA_USERNAME" | sed "s/'/'\\\\\''/g"`
  1866.                 echo "POST_HTTP_DATA_USERNAME='$tempstring'" >> $OUT_FILE
  1867.                 ;;
  1868.             "POST_HTTP_DATA_PASSWD")
  1869.                 POST_HTTP_DATA_PASSWD="`extract_value \"$line\" POST_HTTP_DATA_PASSWD`"
  1870.                 tempstring=`echo "$POST_HTTP_DATA_PASSWD" | sed "s/'/'\\\\\''/g"`
  1871.                 echo "POST_HTTP_DATA_PASSWD='$tempstring'" >> $OUT_FILE
  1872.                 ;;
  1873.             "LIFETIME_PERIOD")
  1874.                 echo "LIFETIME_PERIOD=$value" >> $PROFILE_DIR/schedule.conf
  1875.                 ;;
  1876.             "SCHED_ENABLE")
  1877.                 echo "SCHED_ENABLE=$value" >> $PROFILE_DIR/schedule.conf
  1878.                 ;;
  1879.             "SCHED_TYPE")
  1880.                 echo "SCHED_TYPE=$value" >> $PROFILE_DIR/schedule.conf
  1881.                 ;;
  1882.             "SCHED_DAILY_TIME_DUR")
  1883.                 echo "SCHED_DAILY_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1884.                 ;;
  1885.             "SCHED_WEEKLY_SUN_TIME_DUR")
  1886.                 echo "SCHED_WEEKLY_SUN_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1887.                 ;;
  1888.             "SCHED_WEEKLY_MON_TIME_DUR")
  1889.                 echo "SCHED_WEEKLY_MON_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1890.                 ;;
  1891.             "SCHED_WEEKLY_TUES_TIME_DUR")
  1892.                 echo "SCHED_WEEKLY_TUES_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1893.                 ;;
  1894.             "SCHED_WEEKLY_WED_TIME_DUR")
  1895.                 echo "SCHED_WEEKLY_WED_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1896.                 ;;
  1897.             "SCHED_WEEKLY_THURS_TIME_DUR")
  1898.                 echo "SCHED_WEEKLY_THURS_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1899.                 ;;
  1900.             "SCHED_WEEKLY_FRI_TIME_DUR")
  1901.                 echo "SCHED_WEEKLY_FRI_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1902.                 ;;
  1903.             "SCHED_WEEKLY_SAT_TIME_DUR")
  1904.                 echo "SCHED_WEEKLY_SAT_TIME_DUR=$value" >> $PROFILE_DIR/schedule.conf
  1905.                 ;;
  1906.             "MESH_ENABLED")
  1907.                 echo "MESH_ENABLED=${value:=0}" >> $OUT_FILE
  1908.                 MESH_ENABLED=${value:=0}
  1909.                 if [ "$value"  = "1" ]; then
  1910.                     echo "$profile_id" > /tmp/mesh_enabled;
  1911.                 fi
  1912.                 ;;
  1913.             "MESH_ID")
  1914.                 echo "MESH_ID=$value" >> $OUT_FILE
  1915.                 ;;
  1916.             "MESH_MAX_HOP_COUNT")
  1917.                 echo "MESH_MAX_HOP_COUNT=$value" >> $OUT_FILE
  1918.                 ;;
  1919.             "MESH_MAX_DOWNLINKS")
  1920.                 echo "MESH_MAX_DOWNLINKS=$value" >> $OUT_FILE
  1921.                 ;;
  1922.             "MESH_MIN_RSSI")
  1923.                 echo "MESH_MIN_RSSI=$value" >> $OUT_FILE
  1924.                 ;;
  1925.             "IEEE802_1X_RETRY_TIMEOUT")
  1926.                 value=`echo $value | xargs`
  1927.                                 ieee802_1x_retry_timeout=${value:='2'}
  1928.                                 ;;
  1929.             "IEEE802_1X_MAX_RETRIES")
  1930.                 value=`echo $value | xargs`
  1931.                                 ieee802_1x_max_retries=${value:='4'}
  1932.                 ;;
  1933.             "PORTAL_GATE1_AUTH")
  1934.                 PORTAL_GATE1_AUTH="$value"
  1935.                 ;;
  1936.             "YADWIRE_INTEGRATION_ENABLED")
  1937.                 YADWIRE_INTEGRATION_ENABLED="$value"
  1938.                 ;;
  1939.             "YADWIRE_PING_INTERVAL")
  1940.                 YADWIRE_PING_INTERVAL="$value"
  1941.                 ;;
  1942.             "YADWIRE_USER_KEY")
  1943.                 YADWIRE_USER_KEY="$value"
  1944.                 ;;
  1945.             "YADWIRE_NETWORK_ID")
  1946.                 YADWIRE_NETWORK_ID="$value"
  1947.                 ;;
  1948.             "DNAT_ENABLED")
  1949.                 DNAT_ENABLED="$value"
  1950.                 ;;
  1951.             "NAS_IDENTIFIER")
  1952.                 nas_identifier="`extract_value \"$line\" NAS_IDENTIFIER`"
  1953.                 if [ "$nas_identifier" = "" ];then
  1954.                     nas_identifier="%m-%s"
  1955.                 fi
  1956.                 tempnasid=`echo "$nas_identifier" | sed "s/'/'\\\\\''/g"`
  1957.                 echo "NAS_IDENTIFIER='$tempnasid'" >> $OUT_FILE
  1958.                 nas_identifier=`/opt/ap/stringhandler "${nas_identifier}" 252  -r%m:"$ETH_MAC" -r%s:"$ssid" -r%n:"$device_name" -r%l:"$location_identifier"`
  1959.                 ;;
  1960.             "DHCP82_CONFIGURED")
  1961.                 echo "DHCP82_CONFIGURED=$value" >> $OUT_FILE
  1962.                 ;;
  1963.             "DHCP82_CIRCUIT_ID")
  1964.                 CircuitID="`extract_value \"$line\" DHCP82_CIRCUIT_ID`"
  1965.                 tempcid=`echo "$CircuitID" | sed "s/'/'\\\\\''/g"`
  1966.                 echo "DHCP82_CIRCUIT_ID='$tempcid'" >> $OUT_FILE
  1967.                 ;;
  1968.                         "BSS_LOAD_ENABLE")
  1969.                                 [ "$value" = "0" ] && val1=0 || val1=1
  1970.                                 echo "BSS_LOAD_ENABLE=$val1" >> $OUT_FILE
  1971.                                 ;;
  1972.                         "HS20_VAP_ENABLE")
  1973.                                 [ "$value" = "0" ] && val1=0 || val1=1
  1974.                                 echo "HS20_VAP_ENABLE=$val1" >> $OUT_FILE
  1975.                                 if [ "$val1" = "1" ]; then
  1976.                                         hs20_vap=1
  1977.                                         touch $PROFILE_DIR/hs20_profile
  1978.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "interworking=1"
  1979.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20=1"
  1980.                     update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "anqp_domain_id=$profile_id"
  1981.                                 fi
  1982.                                 ;;
  1983.                         "HS20_L2TIF_ENABLE")
  1984.                                 [ "$value" = "0" ] && val1=0 || val1=1
  1985.                                 echo "HS20_L2TIF_ENABLE=$val1" >> $OUT_FILE
  1986.                                 ;;
  1987.                         "HS20_ACCESS_NETWORK_TYPE")
  1988.                                 if [ "$value" != "" ]; then
  1989.                                          update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "access_network_type=$value"
  1990.                                 fi
  1991.                                 ;;
  1992.                         "HS20_VENUE_GROUP")
  1993.                                 if [ "$value" != "" ]; then
  1994.                                          update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "venue_group=$value"
  1995.                                 fi
  1996.                                 ;;
  1997.                         "HS20_VENUE_TYPE")
  1998.                                 if [ "$value" != "" ]; then
  1999.                                          update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "venue_type=$value"
  2000.                                 fi
  2001.                                 ;;
  2002.                         "HS20_HESSID")
  2003.                                 if [ "$value" != "" ]; then
  2004.                                          update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hessid=$value"
  2005.                                 fi
  2006.                                 ;;
  2007.                         "HS20_INTERNET_ACCESS")
  2008.                                 if [ "$value" != "" ]; then
  2009.                                          update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "internet=$value"
  2010.                                 fi
  2011.                                 ;;
  2012.                         "HS20_VENUE_NAME_AND_LANG_CODE")
  2013.                                 # venue group and venue type need to be set for this
  2014.                                 if [ "$value" != "" ]; then
  2015.                                         venue_name="`extract_value \"$line\" HS20_VENUE_NAME_AND_LANG_CODE`"
  2016.                                         tmp_venue_name=`echo "$venue_name" | sed "s/'/'\\\\\''/g"`
  2017.                     update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "venue_name=P\"$tmp_venue_name\""
  2018.                                 fi
  2019.                                 ;;
  2020.                         "HS20_NETWORK_AUTH_TYPE")
  2021.                                 if [ "$value" != "" ]; then
  2022.                                         # the value from server is of type <code>[URL]
  2023.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "network_auth_type=$value"
  2024.                                 fi
  2025.                                 ;;
  2026.                         "HS20_ROAMING_CONSORTIUM_OI")
  2027.                                 if [ "$value" != "" ]; then
  2028.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "roaming_consortium=$value"
  2029.                                 fi
  2030.                                 ;;
  2031.                         "HS20_IP_ADDR_TYPE_AVAILABILITY")
  2032.                                 # this is a 1 byte bitmap: MSB 2 bits for IPV6 and rest for IPV4
  2033.                                 if [ "$value" != "" ]; then
  2034.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "ipaddr_type_availability=$value"
  2035.                                 fi
  2036.                                 ;;
  2037.                         "HS20_NAI_REALM_ENTRY_START")
  2038.                                 nai_realm_id=$value
  2039.                                 #reinitialize variable before every entry
  2040.                                 nai_realm=""
  2041.                                 eap_methods_list=""
  2042.                                 ;;
  2043.                         "HS20_NAI_REALM")
  2044.                                 if [ "$value" != "" ]; then
  2045.                                         nai_realm=$value
  2046.                                 fi
  2047.                                 ;;
  2048.                         "HS20_EAP_METHOD")
  2049.                                 if [ "$value" != "" ]; then
  2050.                                         ##########################################
  2051.                                         ##      EAP METHODS BITMAP              ##
  2052.                                         ##      BIT     EAP-METHOD              ##
  2053.                                         ##--------------------------------------##
  2054.                                         ##      0       EAP-TLS                 ##
  2055.                                         ##      1       EAP-TTLS/MSCHAPV2       ##
  2056.                                         ##      2       EAP-SIM                 ##
  2057.                                         ##      3       EAP-AKA                 ##
  2058.                     ##      4       EAP-AKA'  (release 2)   ##
  2059.                                         ##########################################
  2060.                                         method=""
  2061.                                         #eap method 1: TLS 2: TTLS/MSCHAPv2 3: SIM 4: AKA 5: AKA'
  2062.                                         if [ "$value" = "0" ]; then
  2063.                                                 method="13[5:6]"
  2064.                                         elif [ "$value" = "1" ]; then
  2065.                                                 method="21[2:4][5:7]"
  2066.                                         elif [ "$value" = "2" ]; then
  2067.                                                 method="18"
  2068.                                         elif [ "$value" = "3" ]; then
  2069.                                                 method="23"
  2070.                                         elif [ "$value" = "4" ]; then
  2071.                                                 method="50"
  2072.                                         fi
  2073.  
  2074.                                         if [ "$method" != "" ]; then
  2075.                                                 eap_methods_list="$eap_methods_list,$method"
  2076.                                         fi
  2077.                                 fi
  2078.                                 ;;
  2079.                         "HS20_NAI_REALM_ENTRY_END")
  2080.                                 if [ "$nai_realm" != "" ]; then
  2081.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "nai_realm=0,$nai_realm$eap_methods_list"
  2082.                                 fi
  2083.  
  2084.                                 #reinitialize variable after every entry
  2085.                                 nai_realm=""
  2086.                                 eap_methods_list=""
  2087.                                 nai_realm_id=""
  2088.                                 ;;
  2089.                         "HS20_CELLULAR_NETWORK_ENTRY_START")
  2090.                                 cn_list_id=$value
  2091.                                 mobile_country_code=""
  2092.                                 mobile_network_code=""
  2093.                                 ;;
  2094.                         "HS20_MOBILE_COUNTRY_CODE")
  2095.                                 mobile_country_code=$value
  2096.                                 ;;
  2097.                         "HS20_MOBILE_NETWORK_CODE")
  2098.                                  mobile_network_code=$value
  2099.                                 ;;
  2100.                         "HS20_CELLULAR_NETWORK_ENTRY_END")
  2101.                                 if [ "$mobile_country_code" != "" -a "$mobile_network_code" != "" ]; then
  2102.                                         if [ "$cellular_networks_list" != "" ]; then
  2103.                                                 cellular_networks_list="$cellular_networks_list;$mobile_country_code,$mobile_network_code"
  2104.                                         else
  2105.                                                 cellular_networks_list="$mobile_country_code,$mobile_network_code"
  2106.                                         fi
  2107.                                 fi
  2108.                                 mobile_country_code=""
  2109.                                 mobile_network_code=""
  2110.                                 cn_list_id=""
  2111.                                 ;;
  2112.                         "HS20_DOMAIN_NAME")
  2113.                                 if [ "$value" != "" ]; then
  2114.                                         if [ "$domain_names_list" != "" ]; then
  2115.                                                 domain_names_list="$domain_names_list,$value"
  2116.                                         else
  2117.                                                 domain_names_list="$value"
  2118.                                         fi
  2119.                                 fi
  2120.                                 ;;
  2121.                         "HS20_OP_FRIENDLY_NAME_AND_LANG_CODE")
  2122.                                 if [ "$value" != "" ]; then
  2123.                                         op_friendly_name="`extract_value \"$line\" HS20_OP_FRIENDLY_NAME_AND_LANG_CODE`"
  2124.                                         tmp_op_friendly_name=`echo "$op_friendly_name" | sed "s/'/'\\\\\''/g"`
  2125.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20_oper_friendly_name=$tmp_op_friendly_name"
  2126.                                 fi
  2127.                                 ;;
  2128.                         "HS20_CONNECTION_CAPAB_ENTRY_START")
  2129.                                 conn_capab_id=$value
  2130.                                 protocol=""
  2131.                                 port_no=""
  2132.                                 port_status=""
  2133.                                 ;;
  2134.                         "HS20_PROTOCOL")
  2135.                                 protocol=$value
  2136.                                 ;;
  2137.                         "HS20_PORT_NO")
  2138.                                 port_no=$value
  2139.                                 ;;
  2140.                         "HS20_PORT_STATUS")
  2141.                                 port_status=$value
  2142.                                 ;;
  2143.                         "HS20_CONNECTION_CAPAB_ENTRY_END")
  2144.                                 if [ "$protocol" != "" -a "$port_no" != "" -a "$port_status" != "" ]; then
  2145.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20_conn_capab=$protocol:$port_no:$port_status"
  2146.                                 fi
  2147.                                 conn_capab_id=""
  2148.                                 protocol=""
  2149.                                 port_no=""
  2150.                                 port_status=""
  2151.                                 ;;
  2152.                         "HS20_WAN_METRICS")
  2153.                                 if [ "$value" != "" ]; then
  2154.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20_wan_metrics=$value"
  2155.                                 fi
  2156.                                 ;;
  2157.                         "PROXYARP_ENABLE")
  2158.                                 [ "$value" = "0" ] && val1=0 || val1=1
  2159.                                 echo "PROXYARP_ENABLE=$val1" >> $OUT_FILE
  2160.                                 proxy_arp=$val1
  2161.                                 ;;
  2162.                         "PROXYARP_DGAF_DISABLE")
  2163.                                 [ "$value" = "0" ] && val1=0 || val1=1
  2164.                                 echo "PROXYARP_DGAF_DISABLE=$val1" >> $OUT_FILE
  2165.                                 disable_dgaf=$val1
  2166.                                 ;;
  2167.                         "P2P_XCONNECT_ENABLE")
  2168.                                 [ "$value" = "0" ] && val1=0 || val1=1
  2169.                                 echo "P2P_XCONNECT_ENABLE=$val1" >> $OUT_FILE
  2170.                                 ;;
  2171.             "IEEE80211W_ENABLE")
  2172.                 if [ "$value" != "" ]; then
  2173.                     ieee80211w_enable=$value
  2174.                 else
  2175.                     ieee80211w_enable=0
  2176.                 fi
  2177.                 ;;
  2178.             "IEEE80211W_GRP_MGMT_CIPHER")
  2179.                 if [ "$value" != "" ]; then
  2180.                     ieee80211w_grp_mgmt_cipher=$value
  2181.                 else
  2182.                     ieee80211w_grp_mgmt_cipher=0
  2183.                 fi
  2184.                 ;;
  2185.             "IEEE80211W_SA_QUERY_MAX_TIMEOUT")
  2186.                 if [ "$value" != "" ]; then
  2187.                                         ieee80211w_sa_query_max_timeout=$value
  2188.                 else
  2189.                     ieee80211w_sa_query_max_timeout=1000
  2190.                 fi
  2191.                 ;;
  2192.             "IEEE80211W_SA_QUERY_RETRY_TIMEOUT")
  2193.                 if [ "$value" != "" ]; then
  2194.                                         ieee80211w_sa_query_retry_timeout=$value
  2195.                                 else
  2196.                                         ieee80211w_sa_query_retry_timeout=200
  2197.                                 fi
  2198.                                 ;;
  2199.             "FT_ENABLE")
  2200.                 ieee80211r_enable=$value
  2201.                 ;;
  2202.             "FT_OVER_DS")
  2203.                 ft_over_ds=$value
  2204.                 ;;
  2205.             "FT_MIXED_MODE")
  2206.                 ft_mixed_mode=$value
  2207.                 ;;
  2208.                     "HS20_RELEASE")
  2209.                                 if [ "$value" != "" ]; then
  2210.                                         hs20_release=$value
  2211.                                 fi
  2212.                                 ;;
  2213.                         "HS20_GAS_FRAG_LIMIT")
  2214.                                  if [ "$value" != "" ]; then
  2215.                                          hs20_gas_frag_limit=$value
  2216.                                  else
  2217.                                         hs20_gas_frag_limit=1400 # default 1400 bytes
  2218.                                 fi
  2219.                                  update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "gas_frag_limit=$hs20_gas_frag_limit"
  2220.                                 ;;
  2221.                         "HS20_GAS_COMEBACK_DELAY")
  2222.                                 if [ "$value" != "" ]; then
  2223.                                          hs20_gas_comeback_delay=$value
  2224.                                  else
  2225.                                          hs20_gas_comeback_delay=0 # default 2 frame gas exchange
  2226.                                  fi
  2227.                                  update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "gas_comeback_delay=$hs20_gas_comeback_delay"
  2228.                                  ;;
  2229.                         "HS20_R2_DEAUTH_REQ_TIMEOUT")
  2230.                                 if [ "$value" != "" ]; then
  2231.                                         hs20_deauth_req_timeout=$value
  2232.                                 else
  2233.                                         hs20_deauth_req_timeout=60 #60 seconds default
  2234.                                 fi
  2235.                                 update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20_deauth_req_timeout=$hs20_deauth_req_timeout"
  2236.                                 ;;
  2237.             "HS20_R2_ICON_DETAILS")
  2238.                 if [ "$value" != "" ]; then # path to icon is: /tmp/profile$profile_id/icons/icon_file_name
  2239.                     tmp_icon_details="`extract_value \"$line\" HS20_R2_ICON_DETAILS`"
  2240.                     icon_details=`echo "$tmp_icon_details" | sed "s/'/'\\\\\''/g"`
  2241.                     update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20_icon=$icon_details"
  2242.  
  2243.                     hs20_icon_present=1
  2244.                 fi
  2245.                 ;;
  2246.                         "HS20_R2_OSU_SSID")
  2247.                                 if [ "$value" != "" ]; then
  2248.                                         tmp_osu_ssid="`extract_value \"$line\" HS20_R2_OSU_SSID`"
  2249.                                         osu_ssid=`echo "$tmp_osu_ssid" | sed "s/'/'\\\\\''/g"`
  2250.                                     update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_ssid=\"$osu_ssid\""
  2251.                                 fi
  2252.                                 ;;
  2253.                         "HS20_R2_OSU_PROVIDER_LIST_START")
  2254.                                 osu_provider_id=$value
  2255.                                 osu_server_uri=""
  2256.                                 osu_friendly_name_with_lang_code="" #can be multiple
  2257.                                 osu_nai=""
  2258.                                 osu_method_list=""
  2259.                                 osu_icon="" #can be multiple
  2260.                                 osu_service_desc_with_lang_code="" #can be multiple
  2261.                                 osu_subscription_remediation_url=""
  2262.                                 ;;
  2263.                         "HS20_R2_OSU_SERVER_URI")
  2264.                                 osu_server_uri=$value
  2265.                                 update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_server_uri=$osu_server_uri"
  2266.                                 ;;
  2267.                         "HS20_R2_OSU_FRIENDLY_NAME_WITH_LANG_CODE")
  2268.                                 if [ "$value" != "" -a "$osu_server_uri" != "" ]; then
  2269.                                          osu_friendly_name="`extract_value \"$line\" HS20_R2_OSU_FRIENDLY_NAME_WITH_LANG_CODE`"
  2270.                                          tmp_osu_friendly_name=`echo "$osu_friendly_name" | sed "s/'/'\\\\\''/g"`
  2271.                                          update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_friendly_name=$tmp_osu_friendly_name"
  2272.                                 fi
  2273.                                 ;;
  2274.                         "HS20_R2_OSU_NAI")
  2275.                                 osu_nai=$value
  2276.                                 if [ "$osu_nai" != "" -a "$osu_server_uri" != "" ]; then #osen must be 1 for this
  2277.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_nai=$osu_nai"
  2278.                                 fi
  2279.                                 ;;
  2280.                         "HS20_R2_OSU_METHOD_LIST")
  2281.                                 osu_method_list=$value
  2282.                                 if [ "$osu_method_list" != "" -a "$osu_server_uri" != "" ]; then
  2283.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_method_list=$osu_method_list"
  2284.                                 fi
  2285.                                 ;;
  2286.                         "HS20_R2_OSU_ICON_NAME")
  2287.                                 osu_icon_name=$value #must be one of the icon names from icon list
  2288.                                 if [ "$osu_icon_name" != "" -a "$osu_server_uri" != "" ]; then
  2289.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_icon=$osu_icon_name"
  2290.                                 fi
  2291.                                 ;;
  2292.                         "HS20_R2_OSU_SERVICE_DESC_WITH_LANG_CODE")
  2293.                                 if [ "$value" != "" -a "$osu_server_uri" != "" ]; then
  2294.                                         osu_service_desc="`extract_value \"$line\" HS20_R2_OSU_SERVICE_DESC_WITH_LANG_CODE`"
  2295.                                         tmp_osu_service_desc=`echo "$osu_service_desc" | sed "s/'/'\\\\\''/g"`
  2296.                                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "osu_service_desc=$tmp_osu_service_desc"
  2297.                                 fi
  2298.                                 ;;
  2299.                         "HS20_R2_OSU_PROVIDER_LIST_END")
  2300.                                 osu_provider_id=""
  2301.                                 osu_server_uri=""
  2302.                                 osu_friendly_name_with_lang_code=""
  2303.                                 osu_nai=""
  2304.                                 osu_method_list=""
  2305.                                 osu_icon=""
  2306.                                 osu_service_desc_with_lang_code=""
  2307.                                 osu_subscription_remediation_url=""
  2308.                                 ;;
  2309.             "HS20_R2_QOS_MAP_SET_EXCEPTIONS")
  2310.                 qos_map_set_exceptions=$value
  2311.                 ;;
  2312.                         "HS20_R2_QOS_MAP_SET")
  2313.                                 qos_map_set_mandatory=$value
  2314.                                 ;;
  2315.                         "HS20_ICONS_BUNDLE_URL")
  2316.                                 icons_bundle_url=$value
  2317.                                 echo "HS20_ICONS_BUNDLE_URL='$icons_bundle_url'" >> $OUT_FILE
  2318.                                 ;;
  2319.                         "HS20_ICONS_BUNDLE_MD5SUM")
  2320.                                 icons_bundle_md5sum=$value
  2321.                                 echo "HS20_ICONS_BUNDLE_MD5SUM=$icons_bundle_md5sum" >> $OUT_FILE
  2322.                                 ;;
  2323.             "WMM_ENFORCE_POLICY_ENABLE")
  2324.                 if [ "$value" != "" ]; then
  2325.                     echo "WMM_ENFORCE_POLICY=$value" >> $OUT_FILE
  2326.                 fi
  2327.                 ;;
  2328.             "BONJOUR_GATEWAY_ENABLED")
  2329.                 if [ "$value" = "1" ];then
  2330.                     bonjour_gateway_enabled=1
  2331.                 fi
  2332.                 ;;
  2333.             "SERVICE_VLAN_LIST")
  2334.                 service_vlan_list=$value
  2335.                 ;;
  2336.                 *)
  2337.                 echo "Unrecognized pair $param:$value in VAP section, using default config command"
  2338.                 ;;
  2339.         esac
  2340.  
  2341.     done < $1
  2342.     if [ "$auth_server_addr" != "" ] && [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ] && [ "$ap_secfile_param" = "" -o "$ap_secfile_param" = "PSK" ];then
  2343.         echo "SAMOG_MAB_ENABLED=1" >> $OUT_FILE
  2344.         ena_samog_mab=1;
  2345.     fi
  2346.     if [ "$ena_remote_bridging" = "1" ];then
  2347.         if [ "$this_profile_nat" = "0" -a "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  2348.             echo "REMOTE_BRIDGING_ENABLED=1" >> $OUT_FILE
  2349.         else
  2350.             echo "REMOTE_BRIDGING_ENABLED=0" >> $OUT_FILE
  2351.             ena_remote_bridging=0
  2352.         fi
  2353.     fi
  2354.     if [ -z $ASSOCIATION_ANALYTICS_ENABLED ] || ! [ $ASSOCIATION_ANALYTICS_ENABLED = 1 ]; then
  2355.         CONTENT_ANALYTICS_ENABLED=0
  2356.     fi
  2357.  
  2358.     if [ "$BS_BAND_STEERING_ENABLED" != "" -o "$BS_RSSI_THRESHOLD" != "" ]; then
  2359.         echo "BS_BAND_STEERING_ENABLED=$BS_BAND_STEERING_ENABLED" >> $OUT_FILE
  2360.         echo "BS_RSSI_THRESHOLD=$BS_RSSI_THRESHOLD" >> $OUT_FILE
  2361.     fi
  2362.  
  2363.     if [ "$CURRENT_SECTION_CMD" != "F_MOD" ]; then
  2364.         #Fix for backward compatibility
  2365.         #If new parameters exempt list is empty. We will consider old exempt list for walled garden functionality.
  2366.         if [ "$AllowedWebHosts" = "" ]; then
  2367.             AllowedWebHosts="$AllowedWebHosts_old"
  2368.         fi
  2369.         #Fix for backward compatibility with 7.1U3
  2370.         #If new parameters - exempt ip list for walled garden as well as auth sites are empty. We will consider old exempt ip port list for walled garden functionality.
  2371.         if [ "$AllowedWalledGardenHosts" = "" ] && [ "$AllowedAuthSitesHosts" = "" ]; then
  2372.             if [ "$PORTAL_GATE1_AUTH" -eq "0" ] ; then
  2373.                 AllowedWalledGardenHosts="$AllowedWebHosts"
  2374.             else
  2375.                 AllowedAuthSitesHosts="$AllowedWebHosts"
  2376.             fi
  2377.         fi
  2378.         if [ "$webq_exempt_list" = "" ]; then
  2379.             webq_exempt_list="$webq_exempt_list_old"
  2380.         fi
  2381.         if [ $ena_ap_okc -eq 1 -a "$ap_secfile_param" = "EAP" ];then
  2382.             if [ "$ap_wpa" = "2" -o "$ap_wpa" = "3" ];then
  2383.                 echo "AP_OKC_ENABLE=1" >> $OUT_FILE
  2384.                 okc_enable=1
  2385.             fi
  2386.         fi
  2387.         if [ $ena_ap_coa -eq 1 -a "$ap_secfile_param" = "EAP" ];then
  2388.             if [ "$ap_wpa" = "2" -o "$ap_wpa" = "3" ];then
  2389.                 echo "AP_COA_ENABLE=1" >> $OUT_FILE
  2390.                 coa_enable=1
  2391.             fi
  2392.         fi
  2393.         if [ "$ena_dynamic_vlan" -eq "1" -a "$ap_secfile_param" = "EAP" ];then
  2394.             if [ "$ap_wpa" = "2" -o "$ap_wpa" = "3" ];then
  2395.                 check_for_dynamic_vlan
  2396.                 if [ $? -eq 1 ];then
  2397.                     echo "DYNAMIC_VLAN_ENABLED=1" >> $OUT_FILE
  2398.                     dynamic_vlan_enabled=1
  2399.                 fi
  2400.             fi
  2401.         fi
  2402.         if [ "$per_user_bandwidth_enable" -eq "1" -a "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ];then
  2403.             echo "PER_USER_BANDWIDTH_ENABLED=1" >> $OUT_FILE
  2404.             if [ "$ena_per_user_bandwidth_download" != "" ];then
  2405.                 echo "PER_USER_BANDWIDTH_DOWNLOAD_LIMIT=$ena_per_user_bandwidth_download" >> $OUT_FILE
  2406.             fi
  2407.             if [ "$ena_per_user_bandwidth_upload" != "" ];then
  2408.                 echo "PER_USER_BANDWIDTH_UPLOAD_LIMIT=$ena_per_user_bandwidth_upload" >> $OUT_FILE
  2409.             fi
  2410.         fi
  2411.  
  2412.         BRIDGE_NAME="br0"
  2413.         if [ "$ena_remote_bridging" = "1" ]; then
  2414.             BRIDGE_NAME="tunbr$network_profile_id"
  2415.         fi
  2416.  
  2417.         echo "PARENT_BRIDGE_NAME=$BRIDGE_NAME" >> $OUT_FILE
  2418.  
  2419.         if [ "$ap_secfile_param" = "EAP" -o "$ap_secfile_param" = "PSK" ];then
  2420.             if [ "$vlan_id" = "0" ];then
  2421.                 echo "AP_ATN_INTERFACE=$BRIDGE_NAME" >> $OUT_FILE
  2422.                 bss_interface=$BRIDGE_NAME
  2423.             else
  2424.                 echo "AP_ATN_INTERFACE=$BRIDGE_NAME.$vlan_id" >> $OUT_FILE
  2425.                 bss_interface=$BRIDGE_NAME.$vlan_id
  2426.             fi
  2427.         fi
  2428.         if [ $ena_ap_preauth -eq 1 -a "$ap_secfile_param" = "EAP" ];then
  2429.             if [ "$ap_wpa" = "2" -o "$ap_wpa" = "3" ];then
  2430.                 echo "AP_RSN_ENA_PREAUTH=1" >> $OUT_FILE
  2431.                 rsn_preauth=1
  2432.                 if [ "$vlan_id" = "0" ];then
  2433.                     echo "AP_WPA_PREAUTH_IF=$BRIDGE_NAME" >> $OUT_FILE
  2434.                     rsn_preauth_interfaces="$BRIDGE_NAME"
  2435.                 else
  2436.                     echo "AP_WPA_PREAUTH_IF=$BRIDGE_NAME.$vlan_id" >> $OUT_FILE
  2437.                     rsn_preauth_interfaces="$BRIDGE_NAME.$vlan_id"
  2438.                 fi
  2439.             fi
  2440.         fi
  2441.  
  2442.         if [ "$vlan_id" = "0" ];then
  2443.             ExternalInterface="$BRIDGE_NAME"
  2444.         else
  2445.             ExternalInterface="$BRIDGE_NAME.$vlan_id"
  2446.         fi
  2447.  
  2448.         if [ "$ap_sec_mode" = "WEP" ];then
  2449.             if [ "$ap_wep_mode" != "" -a "$wepkey_1" != "" -a "$ap_wep_type" != "" ];then
  2450.                 echo "AP_WEP_MODE=$ap_wep_mode" >> $OUT_FILE
  2451.                 echo "WEP_KEY_1='$wepkey_1'" >> $OUT_FILE
  2452.                 echo "AP_WEP_TYPE=$ap_wep_type" >> $OUT_FILE
  2453.                 echo "WEP_CONFIGURED=1" >> $OUT_FILE
  2454.                 echo "$CURRENT_SECTION_ID" > /tmp/radio${radio_id_1}/wep_configured
  2455.                 if [ "$radio_id_2" != "" ]; then
  2456.                     echo "$CURRENT_SECTION_ID" > /tmp/radio${radio_id_2}/wep_configured
  2457.                 fi
  2458.             else
  2459.                 echo "some issue with wep params, not configuring. ap_wep_mode=$ap_wep_mode, wepkey_1=$wepkey_1, ap_wep_type=$ap_wep_type"
  2460.             fi
  2461.         fi
  2462.     fi
  2463.  
  2464.     if [ "$CURRENT_SECTION_CMD" = "F_MOD" ]; then
  2465.         return 0
  2466.     fi
  2467.  
  2468.     WMM_ENABLE_0=$WMM_ENABLE
  2469.     radio_file="/tmp/radio${radio_id_1}/radio.conf"
  2470.     AP_CHMODE=`cat $radio_file | grep AP_CHMODE | cut -d "=" -f2` > /dev/null 2>&1
  2471.     echo $AP_CHMODE | grep "HT"
  2472.     if [ "$?" = "0" ]; then
  2473.         WMM_ENABLE_0=1
  2474.     fi
  2475.     if [ "$WMM_ENABLE" != "" ]; then
  2476.         echo "WMM_ENABLE_${radio_id_1}=$WMM_ENABLE_0" >> $OUT_FILE
  2477.     fi
  2478.  
  2479.     if [ "${radio_id_2}" != "" ]; then
  2480.         WMM_ENABLE_1=$WMM_ENABLE
  2481.         radio_file="/tmp/radio${radio_id_2}/radio.conf"
  2482.         AP_CHMODE=`cat $radio_file | grep AP_CHMODE | cut -d "=" -f2` > /dev/null 2>&1
  2483.         echo $AP_CHMODE | grep "HT"
  2484.         if [ "$?" = "0" ]; then
  2485.             WMM_ENABLE_1=1
  2486.         fi
  2487.         if [ "$WMM_ENABLE" != "" ]; then
  2488.             echo "WMM_ENABLE_${radio_id_2}=$WMM_ENABLE_1" >> $OUT_FILE
  2489.         fi
  2490.     fi
  2491.  
  2492.     if [ $vap_count = "0" ]; then
  2493.         echo "Return from process_profile as no vap configured for profile [$profile_id]"
  2494.         return 1
  2495.     fi
  2496.  
  2497.     echo "APP_VISIBILITY_ENABLED=$APP_VISIBILITY_ENABLED" >> $OUT_FILE
  2498.    
  2499.     if [ "$APP_VISIBILITY_ENABLED" = "1" ]; then
  2500.         APP_VISIBILITY_CONF=$PROFILE_DIR/app_visibility_conf
  2501.         echo "AP_SSID=$ssid" >> $APP_VISIBILITY_CONF
  2502.         echo "PROFILE_ID=$profile_id" >> $APP_VISIBILITY_CONF
  2503.     fi
  2504.  
  2505.     [ "$vlan_id" = "0" ] && vlanid_suffix="" || vlanid_suffix=".$vlan_id"
  2506.     EXTERNAL_INTERFACE="$BRIDGE_NAME$vlanid_suffix"
  2507.  
  2508.     if [ "$MESH_ENABLED" = "1" ]; then
  2509.         EXTERNAL_INTERFACE="mbr"
  2510.         if [ "$radio_id_1" != "" ]; then
  2511.             radio_conf=/tmp/radio"$radio_id_1"/radio.conf
  2512.             if [ -e $radio_conf ]; then
  2513.                 local mesh_role=`cat $radio_conf | grep MESH_ROLE | cut -d "=" -f2`
  2514.             else
  2515.                 mesh_role="2"
  2516.             fi
  2517.         else
  2518.             local mesh_role="2"
  2519.         fi
  2520.  
  2521.         if [ "$mesh_role" = "2" ]; then
  2522.             ## Allocate 2 vaps to profile if mesh intermediate node
  2523.             vap_count=2
  2524.         fi
  2525.     fi
  2526.     get_vap_list $vap_count $vlanid_suffix
  2527.  
  2528.     if [ "$dynamic_vlan_enabled" = "1" ]; then
  2529.         sanitize_dynamic_vlan_list $dynamic_vlan_list $vlan_id
  2530.         echo "DYNAMIC_VLAN=$dynamic_vlan_list" >> $OUT_FILE
  2531.         get_dynamic_vap_list $dynamic_vlan_list
  2532.         echo "DYNAMIC_VAP_LIST=$DYNAMIC_VAP_LIST" >> $OUT_FILE
  2533.         FIREWALL_ENABLED=0
  2534.         SSID_IS_PORTAL_CONFIGURED=0
  2535.         WEBQ_ENABLED=0
  2536.         nat_config_found=0
  2537.     fi
  2538.  
  2539.     if [ "$bonjour_gateway_enabled" -eq "1" ];then
  2540.         if [ "$this_profile_nat" = "0" -a "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  2541.  
  2542.             get_client_vap_list
  2543.  
  2544.             echo "BONJOUR_GATEWAY_ENABLED=1" >> $OUT_FILE
  2545.             echo "SERVICE_VLAN_LIST=$service_vlan_list" >> $OUT_FILE
  2546.             echo "client_interface_list=$CLIENT_VAP_LIST" >> $PROFILE_DIR/bonjour_gateway.conf
  2547.         fi
  2548.     fi
  2549.  
  2550.     if [ "$MESH_ENABLED" = "1" ]; then
  2551.         VAP_LIST=`echo $VAP_LIST | sed -e "s/"ath"/"mesh"/g"`
  2552.     fi
  2553.  
  2554.     if [ "$?" != "0" ]; then
  2555.         echo "Unable to get vap list for profile [$profile_id]"
  2556.         return 1
  2557.     fi
  2558.  
  2559.     if [  "$FIREWALL_ENABLED" = "1" -o "$SSID_IS_PORTAL_CONFIGURED" != "0" -o  "$WEBQ_ENABLED" = "1" ]; then
  2560.         update_wgarden_conf_common $PROFILE_DIR
  2561.     fi
  2562.  
  2563.     if [ "$nat_config_found" = "1" -a "$this_profile_nat" = "1" ]; then
  2564.         echo "Configuring nat setting for [$NAT_COUNT] and vap id is [$global_vap_count]"
  2565.         NAT_COUNT=$(($NAT_COUNT+1))
  2566.         NAT_INTERNAL_INTERFACE="natbr`expr $profile_id`"
  2567.         NAT_VLANID="$vlan_id"
  2568.         update_udhcpd_conf $PROFILE_DIR
  2569.         if [ $WIRED_GUEST_ALREADY_ENABLED -eq 1 -o "$PLATFORM_TYPE" = "PLATFORM_SENAO_CAP4200" -o "$PLATFORM_TYPE" = "PLATFORM_SENAO_OAP6200AG" -o "$PLATFORM_TYPE" = "PLATFORM_ACCTON_AP135_2X2" ]; then
  2570.             enable_wired_guest=0
  2571.         fi
  2572.         if [ $enable_wired_guest -eq 1 ]; then
  2573.             WIRED_GUEST_ALREADY_ENABLED=1
  2574.         fi
  2575.         update_nat_conf $PROFILE_DIR $enable_wired_guest
  2576.         if [ "$IS_GRE_CONFIGURED" = "1" ]; then
  2577.             gre_conf="$PROFILE_DIR/gre.conf"
  2578.             echo "exempted_ip=$GRE_EXEMPTED_IP_LIST" > $gre_conf
  2579.             echo "remote_ip=$GRE_REMOTE_ENDPOINT" >> $gre_conf
  2580.             echo "gre_key=$GRE_KEY" >> $gre_conf
  2581.             echo "tunnel_ip=$GRE_TUNNEL_IP" >> $gre_conf
  2582.             # Disabling Portal Internet Down Feature for GRE configured profiles
  2583.             PORTAL_INTERNET_DOWN_ENABLED="0"
  2584.         fi
  2585.         echo "NAT VAP detected VLANID $NAT_VLANID on VAP list [$VAP_LIST]"
  2586.     else
  2587.         DHCPD_LOCAL_IP="0.0.0.0"
  2588.     fi
  2589.  
  2590.     if [ "$WEBQ_ENABLED" = "1" ]; then
  2591.         NOCAT_PORT=$(($NOCAT_PORT+1))
  2592.         update_webq_conf  $PROFILE_DIR
  2593.         update_wgarden_file "$webq_exempt_list" "$profile_id" "$PROFILE_DIR/wgarden.conf" "/opt/ap/handle_web_quarantine.sh" "wgd_" "WG_"
  2594.         echo $PROFILE_DIR
  2595.     elif [ "$SSID_IS_PORTAL_CONFIGURED" != "0" ]; then
  2596.         NOCAT_PORT=$(($NOCAT_PORT+1))
  2597.         update_nocat_conf  $PROFILE_DIR $profile_id
  2598.         #update rad.conf only when portal is exrternal signin
  2599.         if [ "$SSID_IS_PORTAL_CONFIGURED" = "3" ]; then
  2600.             update_rad_conf $PROFILE_DIR
  2601.             update_rad_attr_conf $PROFILE_DIR
  2602.         fi
  2603.         update_portal_conf $PROFILE_DIR $profile_id # update portal.conf
  2604.         echo $PROFILE_DIR
  2605.         # Update wgarden file for portal page, in this case the action script is different
  2606.         # since portal page must always be accessible to client
  2607.         # separate http and host
  2608.         external_portal_url_without_http=`echo $EXTERNAL_PORTAL_URL | awk -F "://" '{print $2}' | xargs`
  2609.         external_portal_url=`echo $external_portal_url_without_http | awk -F "/" '{print $1}' | xargs`
  2610.         update_wgarden_file "$external_portal_url" "$profile_id" "$PROFILE_DIR/wgarden.conf" "/opt/nocatsplash/libexec/wgarden/wg_action.sh" "" "WG_"
  2611.         update_wgarden_file "$AllowedWalledGardenHosts" "$profile_id" "$PROFILE_DIR/wgarden.conf" "/opt/nocatsplash/libexec/wgarden/wg_action.sh" "" "WG_"
  2612.         update_wgarden_file "$AllowedAuthSitesHosts" "$profile_id" "$PROFILE_DIR/wgarden.conf" "/opt/nocatsplash/libexec/wgarden/auth_sites_action.sh" "" "AS_"
  2613.         wgdQueueNo=$profile_id
  2614.  
  2615.         if [ "$PORTAL_INTERNET_DOWN_ENABLED" = "1" ]; then
  2616.             DNSD_PORT=$(($NOCAT_PORT+1000))
  2617.             if [ "$nat_config_found" = "1" -a "$this_profile_nat" = "1" ]; then
  2618.                 update_resolv_conf $PROFILE_DIR
  2619.             fi
  2620.  
  2621.             echo "$profile_id 0.0.0.0 $DNSD_PORT $PROFILE_DIR/profile_dnsd.conf" >> /tmp/dnsd.conf
  2622.             echo > $PROFILE_DIR/profile_dnsd.conf
  2623.         fi
  2624.     fi
  2625.     update_profile_conf $PROFILE_DIR
  2626.     # If ad_injection is enabled and it is a NAT profile, update resolv.conf
  2627.     # For bridge profile, it is updated from handle_vlan_route.sh
  2628.     if [ "$DNAT_ENABLED" = "1" -a "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  2629.         if [ "$nat_config_found" = "1" -a "$this_profile_nat" = "1" ]; then
  2630.             update_resolv_conf $PROFILE_DIR
  2631.         fi
  2632.     fi
  2633.     if [ "$ap_sec_mode" = "WPA" ]; then
  2634.         cp /etc/ath/ap_bss_template $PROFILE_DIR/sec_profile
  2635.         if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ];then
  2636.             echo "driver=madwifi" >> $PROFILE_DIR/sec_profile
  2637.         else
  2638.             echo "driver=atheros" >> $PROFILE_DIR/sec_profile
  2639.         fi
  2640.         set_security_constants $PROFILE_DIR/sec_profile $ap_secfile_param $profile_id
  2641.         if [ "$ena_samog_mab" = "1" ];then
  2642.             set_radius_mab_sec_profile $PROFILE_DIR/sec_profile $profile_id
  2643.         fi
  2644.                 # tell hostapd about dgaf settings
  2645.                 if [ "$proxy_arp" = "1" -a "$disable_dgaf" != "" ]; then
  2646.                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "disable_dgaf=$disable_dgaf"
  2647.                 fi
  2648.                 # add cellular networks list and domain names list in the hs20_profile
  2649.                 if [ "$cellular_networks_list" != "" ]; then
  2650.                         update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "anqp_3gpp_cell_net=$cellular_networks_list"
  2651.                 fi
  2652.         if [ "$domain_names_list" != "" ]; then
  2653.                     update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "domain_name=$domain_names_list"
  2654.         fi
  2655.  
  2656.                 # update the Release number for hotspot2.0 (0 for R1 and 1 for R2)
  2657.                 update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "hs20_release=$hs20_release"
  2658.  
  2659.         # update the QoS map set
  2660.         qos_map_set_final=""
  2661.         if [ "$qos_map_set_mandatory" != "" ]; then
  2662.             if [ "$qos_map_set_exceptions" != "" ]; then
  2663.                 qos_map_set_final=$qos_map_set_exceptions,$qos_map_set_mandatory
  2664.             else
  2665.                 qos_map_set_final=$qos_map_set_mandatory
  2666.             fi
  2667.  
  2668.             update_HS20_parameter $PROFILE_DIR/hs20_profile $ap_secfile_param $hs20_vap "qos_map_set=$qos_map_set_final"
  2669.         fi
  2670.  
  2671.         # put hotspot2.0 related info in sec_profile sans C-50 platform
  2672.                 if [ "$PLATFORM_TYPE" != "$PLATFORM_LITEON_AP83" -a "$hs20_vap" = "1" ]; then
  2673.                         cat $PROFILE_DIR/hs20_profile >> $PROFILE_DIR/sec_profile
  2674.             echo "HS20_ICON_PRESENT=$hs20_icon_present" >> $OUT_FILE
  2675.                 fi
  2676.     elif [ "$ap_sec_mode" = "None" ];then
  2677.         if [ "$ena_samog_mab" = "1" ];then
  2678.             set_mab_basic_open_sec_profile $PROFILE_DIR/sec_profile $profile_id
  2679.             set_radius_mab_sec_profile $PROFILE_DIR/sec_profile $profile_id
  2680.         fi
  2681.     fi
  2682.  
  2683.     set_misc_params $OUT_FILE
  2684.     return 0
  2685. }
  2686.  
  2687. remove_dfs_chans()
  2688. {
  2689.     LIST=$1
  2690.     local final_list=""
  2691.     local chan
  2692.     LIST=`echo $LIST | sed 's/,/ /g' | xargs`
  2693.     for chan in $LIST
  2694.     do
  2695.         if [ $chan -lt 52 -o $chan -gt 144 ]; then
  2696.             if [ "${final_list}" = "" ]; then
  2697.                 final_list="${chan}"
  2698.             else
  2699.                 final_list="${final_list},${chan}"
  2700.             fi
  2701.         fi
  2702.     done
  2703.     # This will work properly even for 2.4GHz
  2704.     if [ "$final_list" = "" ]; then
  2705.         final_list="36"
  2706.     fi
  2707.     echo $final_list
  2708. }
  2709.  
  2710. process_radio()
  2711. {
  2712.     local OUT_DIR
  2713.     local OUT_FILE
  2714.     local MESH_ROLE=2
  2715.  
  2716.     OUT_DIR="/tmp/radio$CURRENT_SECTION_ID"
  2717.  
  2718.     if [ "$CURRENT_SECTION_CMD" = "MOD" ] || [ "$CURRENT_SECTION_CMD" = "F_MOD" ]; then
  2719.         rm -f $OUT_DIR/modified.conf
  2720.         OUT_FILE=`echo $OUT_DIR/modified.conf`
  2721.     else
  2722.         if [ -d "$OUT_DIR" ]; then
  2723.             rm -rf $OUT_DIR
  2724.         fi
  2725.         mkdir $OUT_DIR
  2726.         OUT_FILE=`echo $OUT_DIR/radio.conf`
  2727.     fi
  2728.  
  2729.     echo "" > $OUT_FILE
  2730.     while read -r line
  2731.     do
  2732.  
  2733.         param=`echo -E "$line" | cut -f1 -d"=" | xargs`
  2734.         value=`echo -E "$line" | cut -f2- -d"="`
  2735.  
  2736.         if [ -z "$param" ];then
  2737.             echo "Paramname blank in line ($line). Ignoring.."
  2738.             continue
  2739.         fi
  2740.  
  2741.         case $param in
  2742.             "WIRELESS_MODE")
  2743.                 case $value in
  2744.                     0) wmode="11b"
  2745.                         ;;
  2746.                     1) wmode="11g"
  2747.                         ;;
  2748.                     2) wmode="11a"
  2749.                         ;;
  2750.                     3) wmode="11ng"
  2751.                         ;;
  2752.                     4) wmode="11na"
  2753.                         ;;
  2754.                     5) wmode="11ac"
  2755.                         ;;
  2756.                 esac
  2757.                 echo "WMODE=$wmode" >> $OUT_FILE
  2758.                 ;;
  2759.             "AP_CHAN_WIDTH")
  2760.                 chwidth=""
  2761.                 if [ "$wmode" = "11ac" ]; then  #IF 11AC RADIO
  2762.                     case $value in
  2763.                         1) chwidth="VHT20"
  2764.                             echo "AP_CH_WIDTH=20" >> $OUT_FILE
  2765.                             ;;
  2766.                         2) chwidth="VHT40"
  2767.                             echo "AP_CH_WIDTH=40" >> $OUT_FILE
  2768.                             ;;
  2769.                         3) chwidth="VHT80"
  2770.                             echo "AP_CH_WIDTH=80" >> $OUT_FILE
  2771.                             ;;
  2772.                         # Temporarily adding following modes
  2773.                         4) chwidth="VHT80"
  2774.                             echo "AP_CH_WIDTH=80" >> $OUT_FILE
  2775.                             ;;
  2776.                         5) chwidth="VHT80"
  2777.                             echo "AP_CH_WIDTH=80" >> $OUT_FILE
  2778.                             ;;
  2779.                         #Temporarily removing following modes, remove comment also later
  2780.                         #4) chwidth="VHT160"
  2781.                         #   echo "AP_CH_WIDTH=160" >> $OUT_FILE
  2782.                         #   ;;
  2783.                         #5) chwidth="VHT80_80"
  2784.                         #   echo "AP_CH_WIDTH=80_80" >> $OUT_FILE
  2785.                         #   ;;
  2786.                     esac
  2787.                 else
  2788.                     case $value in
  2789.                         1) chwidth="HT20"
  2790.                             echo "AP_CH_WIDTH=20" >> $OUT_FILE
  2791.                             ;;
  2792.                         2) chwidth="HT40"
  2793.                             echo "AP_CH_WIDTH=40" >> $OUT_FILE
  2794.                             ;;
  2795.                     esac
  2796.                 fi
  2797.                 ;;
  2798.             "OP_CHANNEL")
  2799.                 if [ "$BUILD_V2" = "TRUE" ]; then
  2800.                     if [ $value -ge 52 -a $value -le 144 ]; then
  2801.                         value=36
  2802.                     fi
  2803.                 fi
  2804.                 echo "AP_PRIMARY_CH=$value" >> $OUT_FILE
  2805.                 ;;
  2806.             "SECOND_OP_CHANNEL")
  2807.                 echo "AP_SECONDARY_CH=$value" >> $OUT_FILE
  2808.                 ;;
  2809.             "OPERATING_MODE")
  2810.                 echo "OPERATING_MODE=${value:=1}" >> $OUT_FILE
  2811.                 ;;
  2812.             "FRAG_THRESH")
  2813.                 echo "FRAG_THRESH=${value:=2346}" >> $OUT_FILE
  2814.                 ;;
  2815.             "RTSCTS_THRESH")
  2816.                 echo "RTSCTS_THRESH=${value:=2346}" >> $OUT_FILE
  2817.                 ;;
  2818.             "BEACON_INT")
  2819.                 echo "BEACON_INT=${value:=100}" >> $OUT_FILE
  2820.                 ;;
  2821.             "DTIM_PERIOD")
  2822.                 echo "DTIM_PERIOD=${value:=1}" >> $OUT_FILE
  2823.                 ;;
  2824.             "SHORT_GI")
  2825.                 echo "SHORTGI=${value:=1}" >> $OUT_FILE
  2826.                 ;;
  2827.             "AMPDUENABLE")
  2828.                 echo "AMPDUENABLE=${value:=1}" >> $OUT_FILE
  2829.                 ;;
  2830.             "MONITORED_VLAN_ID")
  2831.                 ;;
  2832.             "AP_TRANSMIT_POWER_ENABLED")
  2833.                 echo "ENA_AP_TXPOW=${value:=0}" >> $OUT_FILE
  2834.                 ;;
  2835.             "AP_TRANSMIT_POWER")
  2836.                 sanitize_integer $value 0 30
  2837.                 tx_power=$?
  2838.                 if [ "$tx_power" -gt "30" ]; then
  2839.                     echo "RADIO_$radio_id: Invalid TX Power ($value). Using Default TX Power instead."
  2840.                     value=""
  2841.                 else
  2842.                     value=$tx_power
  2843.                 fi
  2844.                 echo "AP_TXPOW_LIM=$value" >> $OUT_FILE
  2845.                 ;;
  2846.             "BGSCAN_ENABLED")
  2847.                 echo "ENABLE_BGSCAN=${value:=0}" >> $OUT_FILE
  2848.                 ;;
  2849.             "AP_INTERVAL")
  2850.                 echo "AP_INTERVAL=${value:=10000}" >> $OUT_FILE
  2851.                 ;;
  2852.             "SCAN_INTERVAL")
  2853.                 echo "SCAN_INTERVAL=${value:=100}" >> $OUT_FILE
  2854.                 ;;
  2855.             "BS_LOAD_BAL_THRESHOLD")
  2856.                 CURR_RADIO_BS_LOAD_BAL_THRESHOLD="$value"
  2857.                 ;;
  2858.             "MESH_ROLE")
  2859.                 echo "MESH_ROLE=${value:=2}" >> $OUT_FILE
  2860.                 ;;
  2861.             "RADIO_ENABLED")
  2862.                 echo "RADIO_ENABLED=${value:=1}" >> $OUT_FILE
  2863.                 ;;
  2864.             "ACS_CHAN_LIST")
  2865.                 if [ "$BUILD_V2" = "TRUE" ]; then
  2866.                     value=`remove_dfs_chans $value`
  2867.                 fi
  2868.                 echo "ACS_CHAN_LIST=$value" >> $OUT_FILE
  2869.                 ;;
  2870.             "DCS_ENABLED")
  2871.                 echo "ENABLE_DCS=${value:=0}" >> $OUT_FILE
  2872.                 ;;
  2873.             "ROAM_INIT_RSSI_THRESHOLD")
  2874.                 echo "ROAM_INIT_RSSI_THRESHOLD=$value" >> $OUT_FILE
  2875.                 ;;
  2876.             "ROAM_INIT_THRESHOLD_INTERVAL")
  2877.                 echo "ROAM_INIT_THRESHOLD_INTERVAL=$value" >> $OUT_FILE
  2878.                 ;;
  2879.             "ROAM_INIT_THRESHOLD_PKTS")
  2880.                 echo "ROAM_INIT_THRESHOLD_PKTS=$value" >> $OUT_FILE
  2881.                 ;;
  2882.             "ASSOC_RSSI_THRESHOLD")
  2883.                 echo "ASSOC_RSSI_THRESHOLD=$value" >> $OUT_FILE
  2884.                 ;;
  2885.             "MAX_ASSOC_RETRIES")
  2886.                 echo "MAX_ASSOC_RETRIES=$value" >> $OUT_FILE
  2887.                 ;;
  2888.             "DESPERATE_CLIENT_INTERVAL")
  2889.                 echo "DESPERATE_CLIENT_INTERVAL=$value" >> $OUT_FILE
  2890.                 ;;
  2891.             "DESPERATE_CLIENT_TIMEOUT")
  2892.                 echo "DESPERATE_CLIENT_TIMEOUT=$value" >> $OUT_FILE
  2893.                 ;;
  2894.             "CWMIN_AP")
  2895.                 echo "CWMIN_AP=$value" >> $OUT_FILE
  2896.                 ;;
  2897.             "CWMAX_AP")
  2898.                 echo "CWMAX_AP=$value" >> $OUT_FILE
  2899.                 ;;
  2900.             "AIFS_AP")
  2901.                 echo "AIFS_AP=$value" >> $OUT_FILE
  2902.                 ;;
  2903.             "TXOP_AP")
  2904.                     echo "TXOP_AP=$value" >> $OUT_FILE
  2905.                 ;;
  2906.             "ACM_AP")
  2907.                 echo "ACM_AP=$value" >> $OUT_FILE
  2908.                 ;;
  2909.             "CWMIN_STA")
  2910.                     echo "CWMIN_STA=$value" >> $OUT_FILE
  2911.                 ;;
  2912.             "CWMAX_STA")
  2913.                 echo "CWMAX_STA=$value" >> $OUT_FILE
  2914.                 ;;
  2915.             "AIFS_STA")
  2916.                 echo "AIFS_STA=$value" >> $OUT_FILE
  2917.                 ;;
  2918.             "TXOP_STA")
  2919.                     echo "TXOP_STA=$value" >> $OUT_FILE
  2920.                 ;;
  2921.             "ACM_STA")
  2922.                 echo "ACM_STA=$value" >> $OUT_FILE
  2923.                 ;;
  2924.             "AMSDU_ENABLED")
  2925.                 echo "AMSDUENABLE=${value:=0}" >> $OUT_FILE
  2926.                 ;;
  2927.             "NOACKPOLICY_AP")
  2928.                 echo "NOACKPOLICY_AP=$value" >> $OUT_FILE
  2929.                 ;;
  2930.             "MAX_CALLS_LIMIT_VIVO")
  2931.                 echo "MAX_CALLS_LIMIT_VIVO=$value" >> $OUT_FILE
  2932.                 ;;
  2933.             "MAX_MEDIUMTIME_SHARE_VIVO")
  2934.                 echo "MAX_MEDIUMTIME_SHARE_VIVO=$value" >> $OUT_FILE
  2935.                 ;;
  2936.             "ROAM_RESERVE_CALLS_VIVO")
  2937.                 echo "ROAM_RESERVE_CALLS_VIVO=$value" >> $OUT_FILE
  2938.                 ;;
  2939.             "ROAM_RESERVE_MEDIUMTIME_VIVO")
  2940.                 echo "ROAM_RESERVE_MEDIUMTIME_VIVO=$value" >> $OUT_FILE
  2941.                 ;;
  2942.             *)
  2943.                 echo "Unrecognized pair $param:$value in Radio section, using default config command"
  2944.                 ;;
  2945.         esac
  2946.     done < $1
  2947.  
  2948.     # Items only for 2.4 GHz Band
  2949.     echo $wmode | grep "a"
  2950.     if [ "$?" = "1" ]; then
  2951.         if [ "$CURR_RADIO_BS_LOAD_BAL_THRESHOLD" != "" ]; then
  2952.             echo "BS_LOAD_BAL_THRESHOLD=$CURR_RADIO_BS_LOAD_BAL_THRESHOLD" >> $OUT_FILE
  2953.         fi
  2954.     fi
  2955.  
  2956.     # AP_CHMODE expects a suffix of plus/minus to current value. As it cannot be derived from
  2957.     # template, driver will change to add it on its own.
  2958.     if [ "$wmode" = "11na" -a "$chwidth" = "HT20" ];then
  2959.         echo "AP_CHMODE=11NAHT20" >> $OUT_FILE
  2960.     elif [ "$wmode" = "11ng" -a "$chwidth" = "HT20" ];then
  2961.         echo "AP_CHMODE=11NGHT20" >> $OUT_FILE
  2962.     elif [ "$wmode" = "11na" -a "$chwidth" = "HT40" ];then
  2963.         echo "AP_CHMODE=11NAHT40" >> $OUT_FILE
  2964.     elif [ "$wmode" = "11ng" -a "$chwidth" = "HT40" ];then
  2965.         echo "AP_CHMODE=11NGHT40" >> $OUT_FILE
  2966.     elif [ "$wmode" = "11ac" -a "$chwidth" = "VHT20" ];then
  2967.         echo "AP_CHMODE=11ACVHT20" >> $OUT_FILE
  2968.     elif [ "$wmode" = "11ac" -a "$chwidth" = "VHT40" ];then
  2969.         echo "AP_CHMODE=11ACVHT40" >> $OUT_FILE
  2970.     elif [ "$wmode" = "11ac" -a "$chwidth" = "VHT80" ];then
  2971.         echo "AP_CHMODE=11ACVHT80" >> $OUT_FILE
  2972.     elif [ "$wmode" = "11ac" -a "$chwidth" = "VHT160" ];then
  2973.                 echo "AP_CHMODE=11ACVHT160" >> $OUT_FILE
  2974.         elif [ "$wmode" = "11ac" -a "$chwidth" = "VHT80_80" ];then
  2975.                 echo "AP_CHMODE=11ACVHT80_80" >> $OUT_FILE
  2976.     elif [ "$wmode" = "11a" ];then
  2977.         echo "AP_CHMODE=11A" >> $OUT_FILE
  2978.     elif [ "$wmode" = "11g" ];then
  2979.         echo "AP_CHMODE=11G" >> $OUT_FILE
  2980.     elif [ "$wmode" = "11b" ];then
  2981.         echo "AP_CHMODE=11B" >> $OUT_FILE
  2982.     fi
  2983.  
  2984. }
  2985.  
  2986. set_mab_basic_open_sec_profile()
  2987. {
  2988.     if [ "$vlan_id" = "0" ];then
  2989.         bss_interface=$BRIDGE_NAME
  2990.     else
  2991.         bss_interface=$BRIDGE_NAME.$vlan_id
  2992.     fi
  2993.  
  2994.     cp /etc/ath/ap_bss_template $PROFILE_DIR/sec_profile
  2995.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ];then
  2996.         echo "driver=madwifi" >> $PROFILE_DIR/sec_profile
  2997.     else
  2998.         echo "driver=atheros" >> $PROFILE_DIR/sec_profile
  2999.     fi
  3000.     echo "ena_remote_bridging=$ena_remote_bridging" >> $1
  3001.     echo "comm_vlan=$comm_vlan" >> $1
  3002.     echo "ssid=$ssid" >> $1
  3003.     echo "assoc_broadcast_enable=$assoc_broadcast_enable" >> $1
  3004.     echo "iapc_through_sensord=$iapc_through_sensord" >> $1
  3005.     echo "bss_interface=$bss_interface" >> $1
  3006.     echo "debug=0" >> $1
  3007.     echo "profile_id=$2" >> $1
  3008.     echo "reboot_count=$AP_REBOOT_COUNT" >> $1
  3009.     echo "ap_mac_without_colon=$AP_MAC_WITHOUT_COLON" >> $1
  3010.     if [ "$nas_identifier" = "" ]; then
  3011.         nas_identifier="%m-%s"
  3012.         nas_identifier=`/opt/ap/stringhandler "$(eval echo "${nas_identifier}")" 256  -r%m:"$ETH_MAC" -r%s:"$ssid"`
  3013.     fi
  3014.     echo "nas_identifier=$nas_identifier" >> $1
  3015. }
  3016. set_radius_mab_sec_profile()
  3017. {
  3018.     echo "samog_enable=1" >> $1
  3019.     if [ "$auth_server_addr" != "" ]; then
  3020.         echo "auth_server_addr=$auth_server_addr" >> $1
  3021.         echo "auth_server_port=$auth_server_port" >> $1
  3022.         echo "auth_server_shared_secret=$auth_server_shared_secret" >> $1
  3023.     fi
  3024.     if [ "$auth_server_addr_2" != "" ]; then
  3025.         echo "auth_server_addr=$auth_server_addr_2" >> $1
  3026.         echo "auth_server_port=$auth_server_port_2" >> $1
  3027.         echo "auth_server_shared_secret=$auth_server_shared_secret_2" >> $1
  3028.     fi
  3029.     echo "own_ip_addr=0.0.0.0" >> $1
  3030.     echo "dump_file=/tmp/hostapd.dump" >> $1
  3031.     echo "radius_das_enable=1" >> $1
  3032.  
  3033.     if [ "$acct_server_addr" != "" ]; then
  3034.         echo "acct_server_addr=$acct_server_addr" >> $1
  3035.         echo "acct_server_port=$acct_server_port" >> $1
  3036.         echo "acct_server_shared_secret=$acct_server_shared_secret" >> $1
  3037.     fi
  3038.     if [ "$acct_server_addr2" != "" ]; then
  3039.         echo "acct_server_addr=$acct_server_addr2" >> $1
  3040.         echo "acct_server_port=$acct_server_port2" >> $1
  3041.         echo "acct_server_shared_secret=$acct_server_shared_secret2" >> $1
  3042.     fi
  3043.     if [ "$ieee802_1x_retry_timeout" != "" ]; then
  3044.         echo "ieee802_1x_retry_timeout=$ieee802_1x_retry_timeout" >> $1
  3045.     fi
  3046.     if [ "$ieee802_1x_max_retries" != "" ]; then
  3047.         echo "ieee802_1x_max_retries=$ieee802_1x_max_retries" >> $1
  3048.     fi 
  3049.     if [ "$called_station_id" = "" ];then
  3050.         called_station_id="%m:%s"
  3051.         called_station_id=`/opt/ap/stringhandler "${called_station_id}" 252  -r%m:"$RFC_ETH_MAC" -r%s:"$ssid"`     
  3052.     fi
  3053.     echo "called_station_id=$called_station_id" >> $1
  3054. }
  3055.  
  3056.  
  3057. ## $1: Security file for profile
  3058. ## $2: EAP/PSK
  3059. ## $3: profile_id
  3060. set_security_constants()
  3061. {
  3062.     echo "ena_remote_bridging=$ena_remote_bridging" >> $1
  3063.     echo "comm_vlan=$comm_vlan" >> $1
  3064.     echo "wpa_gmk_rekey=3600" >> $1
  3065.     echo "wpa_group_rekey=3600" >> $1
  3066.     echo "ssid=$ssid" >> $1
  3067.     echo "assoc_broadcast_enable=$assoc_broadcast_enable" >> $1
  3068.     echo "iapc_through_sensord=$iapc_through_sensord" >> $1
  3069.     echo "wpa=$wpa" >> $1
  3070.     echo "bss_interface=$bss_interface" >> $1
  3071.     echo "debug=0" >> $1
  3072.     echo "profile_id=$3" >> $1
  3073.     echo "reboot_count=$AP_REBOOT_COUNT" >> $1
  3074.     echo "ap_mac_without_colon=$AP_MAC_WITHOUT_COLON" >> $1
  3075.  
  3076.     # 11w not supported for C-50, also handle old server new sensor case
  3077.     if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" -a "$ieee80211w_enable" != "" ]; then
  3078.         echo "ieee80211w=$ieee80211w_enable" >> $1
  3079.         if [ "$ieee80211w_enable" != "0" ]; then # 11w optional(1) or required(2)
  3080.             echo "group_mgmt_cipher=AES-128-CMAC" >> $1 # only this supported for now
  3081.             echo "assoc_sa_query_max_timeout=$ieee80211w_sa_query_max_timeout" >> $1
  3082.             echo "assoc_sa_query_retry_timeout=$ieee80211w_sa_query_retry_timeout" >> $1
  3083.         fi
  3084.     fi
  3085.  
  3086.     if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" -a "$ieee80211r_enable" = "1" ]; then
  3087.         echo "ft_enable=$ieee80211r_enable" >> $1
  3088.         echo "ft_over_ds=$ft_over_ds" >> $1
  3089.         echo "pmk_r1_push=1" >> $1
  3090.         mobility_domain=`expr $profile_id % 65535`
  3091.         echo "mobility_domain=$mobility_domain" >> $1
  3092.         echo "mobility_domain=$mobility_domain"
  3093.         # Retrieve key from /opt/sensor/auth.conf file
  3094.         key=`grep HexKey /opt/sensor/auth.conf | cut -d "=" -f2 | xargs`
  3095.         echo "$key"
  3096.         padding=80000000
  3097.         # Add padding to attain 160 bit size
  3098.         key="$key$padding"
  3099.         echo "$key"
  3100.         # Push content into a file and generate HMAC-SHA1 of that file
  3101.         echo "$ssid $profile_id" > /tmp/temp_keygen.in
  3102.         s1=`openssl_util hmac $key /tmp/temp_keygen.in | cut -d " " -f2 | xargs`
  3103.         rm -rf /tmp/temp_keygen.in >/dev/null 2>&1
  3104.         # Using substring command assign values to various elements from main hmac output string
  3105.         r1_key_holder=`expr substr $s1 1 12`
  3106.         echo "$r1_key_holder"
  3107.         key=`expr substr $s1 9 40`
  3108.         echo "$key"
  3109.         # Converting r1_key_holder string into MAC format
  3110.         r1kh_id=`echo $r1_key_holder | sed 's/.\{2\}/&:/g' | sed "s/\(.*\).\{1\}/\1/"`
  3111.         # Prepare the main r0kh and r1kh entries
  3112.         broadcast="FF:FF:FF:FF:FF:FF"
  3113.         r0kh="$broadcast $ETH_MAC:$profile_id $key"
  3114.         r1kh="$broadcast $r1kh_id $key"
  3115.         echo "r0kh=$r0kh"
  3116.         echo "r1kh=$r1kh"
  3117.         echo "r1_key_holder=$r1_key_holder" >> $1
  3118.         echo "r0kh=$r0kh" >> $1
  3119.         echo "r1kh=$r1kh" >> $1
  3120.     fi
  3121.  
  3122.     if [ "$2" = "EAP" ]; then
  3123.         echo "auth_server_addr=$auth_server_addr" >> $1
  3124.         echo "auth_server_port=$auth_server_port" >> $1
  3125.         echo "auth_server_shared_secret=$auth_server_shared_secret" >> $1
  3126.         if [ "$auth_server_addr_2" != "" ]; then
  3127.             echo "auth_server_addr=$auth_server_addr_2" >> $1
  3128.             echo "auth_server_port=$auth_server_port_2" >> $1
  3129.             echo "auth_server_shared_secret=$auth_server_shared_secret_2" >> $1
  3130.         fi
  3131.         if [ "$eap_reauth_period" != "" ]; then
  3132.             echo "eap_reauth_period=$eap_reauth_period" >> $1
  3133.         else
  3134.             echo "eap_reauth_period=0" >> $1
  3135.         fi
  3136.         if [ "$wpa" != "" ]; then
  3137.             wpa_key_mgmt=WPA-EAP
  3138.             ft_key_mgmt=FT-EAP
  3139.             if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  3140.                 if [ "$ieee80211w_enable" = "2" ]; then
  3141.                     wpa_key_mgmt="$wpa_key_mgmt-SHA256"
  3142.                     ft_key_mgmt="$ft_key_mgmt-SHA256"
  3143.                 fi
  3144.                 if [ "$ieee80211r_enable" = "1" ]; then
  3145.                     if [ "$ft_mixed_mode" = "1" ]; then
  3146.                         wpa_key_mgmt="$wpa_key_mgmt $ft_key_mgmt"
  3147.                     else
  3148.                         wpa_key_mgmt="$ft_key_mgmt"
  3149.                     fi
  3150.                 fi
  3151.             fi
  3152.             echo "wpa_key_mgmt=$wpa_key_mgmt" >> $1
  3153.  
  3154.             if [ "$wpa_pairwise" != "" ]; then
  3155.                 echo "wpa_pairwise=$wpa_pairwise" >> $1
  3156.             else
  3157.                 echo "wpa_pairwise=CCMP" >> $1
  3158.             fi
  3159.  
  3160.             if [ "$hs20_osen_enabled" != "0" ]; then
  3161.                 echo "osen=1" >> $1
  3162.             fi
  3163.         else
  3164.             if [ "$wep_key_len_unicast" != "" ]; then
  3165.                 echo "wep_key_len_unicast=$wep_key_len_unicast" >> $1
  3166.             else
  3167.                 echo "wep_key_len_unicast=13" >> $1
  3168.             fi
  3169.             if [ "$wep_rekey_period" != "" ]; then
  3170.                 echo "wep_rekey_period=$wep_rekey_period" >> $1
  3171.             else
  3172.                 echo "wep_rekey_period=1800" >> $1
  3173.             fi
  3174.             if [ "$wep_key_len_broadcast" != "" ]; then
  3175.                 echo "wep_key_len_broadcast=$wep_key_len_broadcast" >> $1
  3176.             else
  3177.                 echo "wep_key_len_broadcast=13" >> $1
  3178.             fi
  3179.         fi
  3180.         echo "eap_server=0" >> $1
  3181.         echo "ieee8021x=1" >> $1
  3182.         echo "own_ip_addr=0.0.0.0" >> $1
  3183.         echo "dump_file=/tmp/hostapd.dump" >> $1
  3184.         if [ "$rsn_preauth" = "1" ]; then
  3185.             echo "rsn_preauth=$rsn_preauth" >> $1
  3186.             echo "rsn_preauth_interfaces=$rsn_preauth_interfaces" >> $1
  3187.         fi
  3188.         if [ "$okc_enable" = "1" ]; then
  3189.             echo "okc_enable=1" >> $1
  3190.         fi
  3191.         echo "radius_das_enable=1" >> $1
  3192.         if [ "$coa_enable" = "1" ]; then
  3193.             echo "radius_coa_enable=1" >> $1
  3194.         fi
  3195.         if [ "$dynamic_vlan_enabled" = "1" ]; then
  3196.             echo "dynamic_vlan=1" >> $1
  3197.         fi
  3198.         if [ "$per_user_bandwidth_enable" = "1" ]; then
  3199.             echo "per_user_bandwidth_enable=1" >>$1
  3200.         fi
  3201.         if [ "$acct_server_addr" != "" ]; then
  3202.             echo "acct_server_addr=$acct_server_addr" >> $1
  3203.             echo "acct_server_port=$acct_server_port" >> $1
  3204.             echo "acct_server_shared_secret=$acct_server_shared_secret" >> $1
  3205.         fi
  3206.         if [ "$acct_server_addr2" != "" ]; then
  3207.             echo "acct_server_addr=$acct_server_addr2" >> $1
  3208.             echo "acct_server_port=$acct_server_port2" >> $1
  3209.             echo "acct_server_shared_secret=$acct_server_shared_secret2" >> $1
  3210.         fi
  3211.         if [ "$ieee802_1x_retry_timeout" != "" ]; then
  3212.             echo "ieee802_1x_retry_timeout=$ieee802_1x_retry_timeout" >> $1
  3213.         fi
  3214.         if [ "$ieee802_1x_max_retries" != "" ]; then
  3215.             echo "ieee802_1x_max_retries=$ieee802_1x_max_retries" >> $1
  3216.         fi
  3217.         if [ "$nas_identifier" = "" ]; then
  3218.             nas_identifier="%m-%s"
  3219.             nas_identifier=`/opt/ap/stringhandler "$(eval echo "${nas_identifier}")" 256  -r%m:"$ETH_MAC" -r%s:"$ssid"`
  3220.         fi
  3221.         echo "nas_identifier=$nas_identifier" >> $1
  3222.  
  3223.         if [ "$called_station_id" = "" ];then
  3224.             called_station_id="%m:%s"
  3225.             called_station_id=`/opt/ap/stringhandler "${called_station_id}" 252  -r%m:"$RFC_ETH_MAC" -r%s:"$ssid"`     
  3226.         fi
  3227.         if [ "$backup_called_station_id" != "%b:%s" -a "$backup_called_station_id" != "" ];then
  3228.             echo "called_station_id=$called_station_id" >> $1
  3229.         fi
  3230.     else
  3231.         wpa_key_mgmt=WPA-PSK
  3232.         ft_key_mgmt=FT-PSK
  3233.         if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  3234.             if [ "$ieee80211w_enable" = "2" ]; then
  3235.                 wpa_key_mgmt="$wpa_key_mgmt-SHA256"
  3236.                 ft_key_mgmt="$ft_key_mgmt-SHA256"
  3237.             fi
  3238.             if [ "$ieee80211r_enable" = "1" ]; then
  3239.                 if [ "$ft_mixed_mode" = "1" ]; then
  3240.                     wpa_key_mgmt="$wpa_key_mgmt $ft_key_mgmt"
  3241.                 else
  3242.                     wpa_key_mgmt="$ft_key_mgmt"
  3243.                 fi
  3244.             fi
  3245.         fi
  3246.         echo "wpa_key_mgmt=$wpa_key_mgmt" >> $1
  3247.  
  3248.         echo "wpa_pairwise=$wpa_pairwise" >> $1
  3249.         echo "eap_server=1" >> $1
  3250.         echo "ieee8021x=0" >> $1
  3251.         if [ "$PLATFORM_TYPE" = "PLATFORM_SENAO_CAP4200" -o "$PLATFORM_TYPE" = "PLATFORM_SENAO_OAP6200AG" -o "$PLATFORM_TYPE" = "PLATFORM_LITEON_DB12x" -o "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ];then
  3252.                 echo "wpa_strict_rekey=1" >> $1
  3253.             fi
  3254.  
  3255.         # If mesh psk key is there then ignore ssid psk key.
  3256.         if [ "$mesh_passphrase" != "" -a "$MESH_ENABLED" = "1" ]; then
  3257.             echo "wpa_passphrase=$mesh_passphrase" >> $1
  3258.         else
  3259.             if [ "$wpa_passphrase" != "" ]; then
  3260.                 echo "wpa_passphrase=$wpa_passphrase" >> $1
  3261.             fi
  3262.         fi
  3263.         if [ "$nas_identifier" = "" ]; then
  3264.             nas_identifier="%m-%s"
  3265.             nas_identifier=`/opt/ap/stringhandler "$(eval echo "${nas_identifier}")" 256  -r%m:"$ETH_MAC" -r%s:"$ssid"`
  3266.         fi
  3267.         echo "nas_identifier=$nas_identifier" >> $1
  3268.     fi
  3269. }
  3270.  
  3271. set_misc_params()
  3272. {
  3273.     echo "AP_STARTMODE=multivlan">> $1
  3274.     echo "RATECTL=auto" >> $1
  3275.     echo "TXQUEUELEN=1000" >> $1
  3276.     echo "AMPDUFRAMES=32" >> $1
  3277.     echo "AMPDULIMIT=50000" >> $1
  3278.     echo "AMPDUMIN=32768" >> $1
  3279.     echo "WPS_ENABLE=0" >> $1
  3280.     echo "AP_PRIMARY_KEY=1" >> $1
  3281. }
  3282.  
  3283. set_profile_for_vap()
  3284. {
  3285.     local vap_1
  3286.     local vap_2
  3287.     per_user_bw_mapping=0
  3288.     PROFILE_CONF="/tmp/profile$1/profile.conf"
  3289.     nocat_conf="/tmp/profile$1/nocat.conf"
  3290.     is_portal_radius=""
  3291.     AP_SECMODE=`grep "AP_SECMODE" "$PROFILE_CONF" | cut -f2 -d '='`
  3292.     if [ -f "$nocat_conf" ];then
  3293.         is_portal_radius=`grep "OperatingMode" "$nocat_conf" | sed "s/OperatingMode//" | xargs` >/dev/null 2>&1
  3294.     fi
  3295.     vap_1=`cat /tmp/profile$1/profile.conf | grep "^VAP_LIST" \
  3296.         | cut -d "=" -f2 | awk -F "," '{print $1}' | xargs`
  3297.     vap_2=`cat /tmp/profile$1/profile.conf | grep "^VAP_LIST" \
  3298.         | cut -d "=" -f2 | awk -F "," '{print $2}' | xargs`
  3299.     vap_1=`echo $vap_1 | cut -d "." -f1`
  3300.     vap_2=`echo $vap_2 | cut -d "." -f1`
  3301.     if [ "$2" = "disable" ]; then
  3302.         # BW binary is being used for Radius accounting feature as well
  3303.         bw=$(cat /tmp/profile$1/profile.conf \
  3304.         | grep "^PER_USER_BANDWIDTH_ENABLED=" | cut -d "=" -f2 | xargs)
  3305.         if [ "$bw" = "1" ];then
  3306.             if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  3307.                 bw profile_for_vap ${vap_1} 0 $per_user_bw_mapping
  3308.                 bw profile_for_vap ${vap_2} 0 $per_user_bw_mapping
  3309.             fi
  3310.         fi
  3311.     elif [ "$2" = "enable" ]; then
  3312.         bw=$(cat /tmp/profile${profile_id}/profile.conf \
  3313.         | grep "^PER_USER_BANDWIDTH_ENABLED=" | cut -d "=" -f2 | xargs)
  3314.         if [ "$bw" = "1" ];then
  3315.             if [ "$PLATFORM_TYPE" != "PLATFORM_LITEON_AP83" ]; then
  3316.                 bw profile_for_vap ${vap_1} $1 $per_user_bw_mapping
  3317.                 bw profile_for_vap ${vap_2} $1 $per_user_bw_mapping
  3318.             fi
  3319.         fi
  3320.     fi
  3321. }
  3322.  
  3323. update_radio_vap_mapping()
  3324. {
  3325.     local vap_1
  3326.     local vap_2
  3327.     local radio_1
  3328.     local radio_2
  3329.     local radio_vap_mapping_file=/tmp/radio_vap_mapping
  3330.     local tmp_file=/tmp/radio_vap_mapping.tmp
  3331.     local tmp_file_1=/tmp/radio_vap_mapping.tmp.1
  3332.  
  3333.     mesh_enabled=`cat /tmp/profile$1/profile.conf | grep MESH_ENABLED |  awk -F "=" '{print $2}' | xargs`
  3334.  
  3335.     vap_1=`cat /tmp/profile$1/profile.conf | grep "^VAP_LIST" \
  3336.         | cut -d "=" -f2 | awk -F "," '{print $1}' | xargs`
  3337.     vap_2=`cat /tmp/profile$1/profile.conf | grep "^VAP_LIST" \
  3338.         | cut -d "=" -f2 | awk -F "," '{print $2}' | xargs`
  3339.  
  3340.     radio_1=`cat /tmp/profile$1/profile.conf | grep RADIO_ID \
  3341.         | cut -d "=" -f2 | awk -F "," '{print $1}' | xargs`
  3342.     if [ "$mesh_enabled" != "1" ]; then
  3343.         radio_2=`cat /tmp/profile$1/profile.conf | grep RADIO_ID \
  3344.             | cut -d "=" -f2 | awk -F "," '{print $2}' | xargs`
  3345.     else
  3346.         radio_2=$radio_1
  3347.     fi
  3348.  
  3349.     vap_1=`echo $vap_1 | cut -d "." -f1`
  3350.     vap_2=`echo $vap_2 | cut -d "." -f1`
  3351.  
  3352.     echo "$radio_1:$vap_1,$radio_2:$vap_2"
  3353.     if [ "$2" = "remove" ]; then
  3354.         if [ "$vap_1" != "" ]; then
  3355.             cat $radio_vap_mapping_file | grep -v "${vap_1}$" > $tmp_file
  3356.             cp $tmp_file $tmp_file_1
  3357.         fi
  3358.         if [ "$vap_2" != "" ]; then
  3359.             cat $tmp_file | grep -v "${vap_2}$" > $tmp_file_1
  3360.         fi
  3361.         rm $tmp_file
  3362.         mv $tmp_file_1 $radio_vap_mapping_file
  3363.     elif [ "$2" = "add" ]; then
  3364.         if [ "$vap_1" != "" ]; then
  3365.             echo "${radio_1}:${vap_1}" >> $radio_vap_mapping_file
  3366.         fi
  3367.         if [ "$vap_2" != "" ]; then
  3368.             echo "${radio_2}:${vap_2}" >> $radio_vap_mapping_file
  3369.         fi
  3370.     fi
  3371. }
  3372.  
  3373. cleanup_current_network_section()
  3374. {
  3375.     cp -r /tmp/network$CURRENT_SECTION_ID /tmp/.network$CURRENT_SECTION_ID >/dev/null 2>&1
  3376.     rm -rf /tmp/network$CURRENT_SECTION_ID >/dev/null 2>&1
  3377. }
  3378.  
  3379. cleanup_current_section()
  3380. {
  3381.     set_profile_for_vap $CURRENT_SECTION_ID disable
  3382.     update_radio_vap_mapping $CURRENT_SECTION_ID remove
  3383.     cp -r /tmp/profile$CURRENT_SECTION_ID /tmp/.profile$CURRENT_SECTION_ID
  3384.     rm -rf /tmp/profile$CURRENT_SECTION_ID
  3385.     ## What else needs to be cleaned up?
  3386. }
  3387.  
  3388. update_fmod_params()
  3389. {
  3390.     conf_file=$1
  3391.     modified_conf_file=$2
  3392.  
  3393.     while read -r line
  3394.     do
  3395.         name=`echo $line | cut -d "=" -f1 | xargs`
  3396.         value=`echo $line | cut -d "=" -f2 | xargs`
  3397.         nv_line_old=`grep "$name" "$conf_file"`
  3398.         if [ "$name" = "" -o "$value" = "" ]; then
  3399.             continue
  3400.         fi
  3401.         if [ "$nv_line_old" != "" ]; then
  3402.             replace_string_in_a_file $conf_file $nv_line_old "$name=$value"
  3403.         else
  3404.             echo "Param $name not found in file $conf_file. Writing into it."
  3405.             echo "$name=$value" >> $conf_file
  3406.         fi
  3407.     done < $modified_conf_file
  3408. }
  3409.  
  3410. ## VAP handling
  3411. check_and_start_ssid()
  3412. {
  3413.     local id=$1
  3414.     local cmd=$2
  3415.     local life_time
  3416.     local sched_enabled
  3417.     local start="now"
  3418.     local stop="forever"
  3419.     local match
  3420.  
  3421.     sched_enabled="0"
  3422.     if [ -f /tmp/profile${id}/schedule.conf ]; then
  3423.         sched_enabled=`cat /tmp/profile${id}/schedule.conf | grep SCHED_ENABLE | cut -d "=" -f2`
  3424.         life_time=`cat /tmp/profile${id}/schedule.conf | grep LIFETIME_PERIOD | cut -d "=" -f2`
  3425.         start=`echo $life_time | cut -d "(" -f2 | cut -d "," -f1  |xargs`
  3426.         stop=`echo $life_time | cut -d "(" -f2 | cut -d "," -f2 | cut -d ")" -f1 | xargs`
  3427.     fi
  3428.  
  3429.     match=`awk -vs1="${start}_${stop}" -vs2="now_forever" 'BEGIN { if ( tolower(s1) == tolower(s2) ){ print "match" } }'`
  3430.  
  3431.     if [ "$sched_enabled" != "1" -a "$match" = "match" ]; then
  3432.         /opt/ap/ssid_start.sh ${id} $cmd >> /tmp/profile${id}/ssid_start_logs 2>&1
  3433.     else
  3434.         # We have to create VAP even if its schedule is not up right now
  3435.         if [ "$CURRENT_SECTION_CMD" = "NEW" ]; then
  3436.             /opt/ap/ssid_start.sh ${id} create_only >> /tmp/profile${id}/ssid_start_logs 2>&1
  3437.         # F_MOD is allowed now only if this schedule is up right now, i.e. is running file is present
  3438.         elif [ "$CURRENT_SECTION_CMD" = "F_MOD" -a -f /tmp/profile${id}/running ]; then
  3439.             /opt/ap/ssid_start.sh ${id} fast >> /tmp/profile${id}/ssid_start_logs 2>&1
  3440.         fi
  3441.         # MOD_START is taken care by schedule_ssid.sh script
  3442.     fi
  3443. }
  3444.  
  3445. handle_vap_new()
  3446. {
  3447.     process_ssid_profile /tmp/.section_VAP
  3448.     if [ $? -eq 1 ]; then
  3449.         echo "NEW START VAP $CURRENT_SECTION_ID aborted"
  3450.         rm -rf /tmp/profile${CURRENT_SECTION_ID}
  3451.         return
  3452.     fi
  3453.     update_radio_vap_mapping $CURRENT_SECTION_ID add
  3454.     echo "NEW START VAP $CURRENT_SECTION_ID"
  3455.     set_profile_for_vap $CURRENT_SECTION_ID enable
  3456.     check_and_start_ssid $CURRENT_SECTION_ID create
  3457. }
  3458.  
  3459. handle_vap_del()
  3460. {
  3461.     /opt/ap/ssid_stop.sh $CURRENT_SECTION_ID delete >> /tmp/profile${CURRENT_SECTION_ID}/ssid_stop_logs 2>&1
  3462.     cleanup_current_section
  3463.     if [ -f /opt/nocatsplash/portal${CURRENT_SECTION_ID}.tgz ]; then
  3464.         rm -f /opt/nocatsplash/portal${CURRENT_SECTION_ID}.tgz
  3465.     fi
  3466.  
  3467.     if [ -f /opt/ap/icons/icons${CURRENT_SECTION_ID}.tgz ]; then
  3468.         rm -f /opt/ap/icons/icons${CURRENT_SECTION_ID}.tgz
  3469.     fi
  3470. }
  3471.  
  3472. handle_vap_fmod()
  3473. {
  3474.     local PROFILE_DIR=/tmp/profile$CURRENT_SECTION_ID
  3475.     process_ssid_profile /tmp/.section_VAP
  3476.     if [ $? -eq 1 ]; then
  3477.         echo "F_MOD VAP $CURRENT_SECTION_ID aborted"
  3478.         rm -rf /tmp/profile${CURRENT_SECTION_ID}
  3479.         return
  3480.     fi
  3481.     update_fmod_params $PROFILE_DIR/profile.conf $PROFILE_DIR/modified.conf
  3482.     echo "F_MOD VAP $CURRENT_SECTION_ID"
  3483.     echo "" >> /tmp/profile${CURRENT_SECTION_ID}/ssid_start_logs
  3484.     echo "Doing Fast Path changes" >> /tmp/profile${CURRENT_SECTION_ID}/ssid_start_logs
  3485.     check_and_start_ssid $CURRENT_SECTION_ID fast
  3486.     mv $PROFILE_DIR/modified.conf $PROFILE_DIR/modified.conf.debug
  3487. }
  3488.  
  3489. handle_vap_mod_stop()
  3490. {
  3491.     echo "MOD STOP VAP $CURRENT_SECTION_ID"
  3492.     /opt/ap/ssid_stop.sh $CURRENT_SECTION_ID stop >> /tmp/profile${CURRENT_SECTION_ID}/ssid_stop_logs 2>&1
  3493.     grep "^VAP_LIST" /tmp/profile${CURRENT_SECTION_ID}/profile.conf > /tmp/profile${CURRENT_SECTION_ID}_old_params
  3494.     cleanup_current_section
  3495. }
  3496.  
  3497. handle_vap_mod_start()
  3498. {
  3499.     process_ssid_profile /tmp/.section_VAP
  3500.     if [ $? -eq 1 ]; then
  3501.         echo "MOD START VAP $CURRENT_SECTION_ID aborted"
  3502.         rm -rf /tmp/profile${CURRENT_SECTION_ID}
  3503.         rm -f /tmp/profile${CURRENT_SECTION_ID}_old_params
  3504.         return
  3505.     fi
  3506.     echo "MOD START VAP $CURRENT_SECTION_ID"
  3507.     set_profile_for_vap $CURRENT_SECTION_ID enable
  3508.     check_and_start_ssid $CURRENT_SECTION_ID normal
  3509.     update_radio_vap_mapping $CURRENT_SECTION_ID add
  3510.     rm -f /tmp/profile${CURRENT_SECTION_ID}_old_params
  3511. }
  3512.  
  3513. handle_vap_start()
  3514. {
  3515.     echo "START VAP $CURRENT_SECTION_ID"
  3516.     /opt/ap/ssid_start.sh $CURRENT_SECTION_ID normal >> /tmp/profile${CURRENT_SECTION_ID}/ssid_start_logs 2>&1
  3517. }
  3518.  
  3519. handle_vap_stop()
  3520. {
  3521.     echo "STOP VAP $CURRENT_SECTION_ID"
  3522.     /opt/ap/ssid_stop.sh $CURRENT_SECTION_ID scheduled_stop >> /tmp/profile${CURRENT_SECTION_ID}/ssid_stop_logs 2>&1
  3523. }
  3524.  
  3525. ## Radio handling
  3526. handle_radio_new()
  3527. {
  3528.     process_radio /tmp/.section_RADIO
  3529. }
  3530.  
  3531. handle_radio_fmod()
  3532. {
  3533.     local RADIO_DIR=/tmp/radio$CURRENT_SECTION_ID
  3534.     process_radio /tmp/.section_RADIO
  3535.     update_fmod_params $RADIO_DIR/radio.conf $RADIO_DIR/modified.conf
  3536. }
  3537.  
  3538. handle_radio_section()
  3539. {
  3540.     case $CURRENT_SECTION_CMD in
  3541.         "NEW")
  3542.             handle_radio_new
  3543.             ;;
  3544.         "MOD")
  3545.             handle_radio_fmod
  3546.             ;;
  3547.         "F_MOD")
  3548.             handle_radio_fmod
  3549.             ;;
  3550.         *)
  3551.             handle_radio_new
  3552.             ;;
  3553.     esac
  3554. }
  3555.  
  3556. handle_vap_section()
  3557. {
  3558.     case $CURRENT_SECTION_CMD in
  3559.         "NEW")
  3560.             handle_vap_new
  3561.             ;;
  3562.         "MOD_STOP")
  3563.             handle_vap_mod_stop
  3564.             ;;
  3565.         "MOD_START")
  3566.             handle_vap_mod_start
  3567.             ;;
  3568.         "F_MOD")
  3569.             handle_vap_fmod
  3570.             ;;
  3571.         "DEL")
  3572.             handle_vap_del
  3573.             ;;
  3574.         "START")
  3575.             handle_vap_start
  3576.             ;;
  3577.         "STOP")
  3578.             handle_vap_stop
  3579.             ;;
  3580.         *)
  3581.             handle_vap_new
  3582.             ;;
  3583.     esac
  3584. }
  3585.  
  3586. check_and_start_network()
  3587. {
  3588.     local id=$1
  3589.     local cmd=$2
  3590.     /opt/ap/network_start.sh ${id} ${cmd} >> /tmp/network$id/network_start_logs 2>&1
  3591. }
  3592.  
  3593. set_gretap_conf()
  3594. {
  3595.     NETWORK_PROFILE_DIR="/tmp/network$CURRENT_SECTION_ID"
  3596.     mkdir $NETWORK_PROFILE_DIR/gretap >/dev/null 2>&1
  3597.     GRETAP_DIR=$NETWORK_PROFILE_DIR/gretap
  3598.     GRETAP_CONF_FILE=$GRETAP_DIR/gretap.conf
  3599.  
  3600.     echo "EOGRE_PRIMARY_KEY=$EOGRE_PRIMARY_KEY" >> $GRETAP_CONF_FILE
  3601.     echo "EOGRE_SECONDARY_KEY=$EOGRE_SECONDARY_KEY" >> $GRETAP_CONF_FILE
  3602. }
  3603.  
  3604. get_ipsec_ids()
  3605. {
  3606.     if [ "$tunnel" = "primary" ];then
  3607.         IPSEC_LOCAL_IP=$1
  3608.         if [ "$IPSEC_LEFT_ID" = "" ];then
  3609.             IPSEC_LEFT_ID="$IPSEC_LOCAL_IP"
  3610.             echo "DEBUG_LOG : Reverting LEFT ID to Ip"
  3611.         fi
  3612.         if [ "$IPSEC_RIGHT_ID" = "" ];then
  3613.             # PRIMARY - SECONDARY logic to be added here
  3614.             IPSEC_RIGHT_ID=$IPSEC_PRIMARY_REMOTE
  3615.             echo "DEBUG_LOG : Reverting RIGHT ID to Ip"
  3616.         fi
  3617.     elif [ "$tunnel" = "secondary" ];then
  3618.         IPSEC_LOCAL_IP=$1
  3619.         if [ "$IPSEC_LEFT_ID_2" = "" ];then
  3620.             IPSEC_LEFT_ID_2="$IPSEC_LOCAL_IP"
  3621.             echo "DEBUG_LOG : Reverting LEFT ID to Ip"
  3622.         fi
  3623.  
  3624.         if [ "$IPSEC_RIGHT_ID_2" = "" ];then
  3625.             # PRIMARY - SECONDARY logic to be added here
  3626.             IPSEC_RIGHT_ID_2=$IPSEC_SECONDARY_REMOTE
  3627.             echo "DEBUG_LOG : Reverting RIGHT ID to Ip"
  3628.         fi
  3629.     fi
  3630. }
  3631.  
  3632. get_ipsec_username()
  3633. {
  3634.     if [ "$tunnel" = "primary" ];then
  3635.     case $IPSEC_LEFT_AUTH in
  3636.         "xauth")
  3637.             if [ "$IPSEC_XAUTH_USERNAME" = "" ];then
  3638.                 echo "DEBUG_LOG : Reverting username to identity"
  3639.                 IPSEC_XAUTH_USERNAME=$IPSEC_LEFT_ID
  3640.             fi
  3641.             ;;
  3642.         "eap")
  3643.             if [ "$IPSEC_EAP_USERNAME" = "" ];then
  3644.                 IPSEC_EAP_USERNAME=$IPSEC_LEFT_ID
  3645.                 echo "DEBUG_LOG : Reverting username to identity"
  3646.             fi
  3647.             ;;
  3648.     esac
  3649.     elif [ "$tunnnel" = "secondary" ];then
  3650.         case $IPSEC_LEFT_AUTH_2 in
  3651.             "xauth")
  3652.                 if [ "$IPSEC_XAUTH_USERNAME_2" = "" ];then
  3653.                     echo "DEBUG_LOG : Reverting username to identity"
  3654.                     IPSEC_XAUTH_USERNAME_2=$IPSEC_LEFT_ID_2
  3655.                 fi
  3656.                 ;;
  3657.             "eap")
  3658.                 if [ "$IPSEC_EAP_USERNAME_2" = "" ];then
  3659.                     IPSEC_EAP_USERNAME_2=$IPSEC_LEFT_ID_2
  3660.                     echo "DEBUG_LOG : Reverting username to identity"
  3661.                 fi
  3662.                 ;;
  3663.         esac
  3664.  
  3665.     fi
  3666. }
  3667.  
  3668. set_ipsec_secret()
  3669. {
  3670.     tunnel=$1
  3671.     if [ "$tunnel" = "primary" ];then
  3672.     case $IPSEC_LEFT_AUTH in
  3673.         "xauth")
  3674.             # else handled in handle_vlan_route
  3675.             echo "DEBUG_LOG : LEFT : $IPSEC_LEFT_AUTH and USERNAME : $IPSEC_XAUTH_USERNAME"
  3676.             if [ "$IPSEC_XAUTH_USERNAME" != "" ];then
  3677.                 echo "$IPSEC_XAUTH_USERNAME : XAUTH $IPSEC_XAUTH_PASSWORD" >> $IPSEC_SECRET_FILE
  3678.             fi
  3679.             if [ "$IPSEC_RIGHT_AUTH" = "psk" -a "$IPSEC_IKE_VERSION" = "ikev2" ];then
  3680.                 if [ "$IPSEC_LEFT_ID" != "" -a "$IPSEC_RIGHT_ID" != "" -a "$IPSEC_RIGHT_PSK" != "" ];then
  3681.                     echo "$IPSEC_LEFT_ID $IPSEC_RIGHT_ID : PSK $IPSEC_RIGHT_PSK" >> $IPSEC_SECRET_FILE
  3682.                 fi
  3683.             fi
  3684.             ;;
  3685.         "eap")
  3686.             # else handled in handle_vlan_route
  3687.             echo "DEBUG_LOG : LEFT :  $IPSEC_LEFT_AUTH and USERNAME : $IPSEC_EAP_USERNAME "
  3688.             if [ "$IPSEC_EAP_USERNAME" != "" ];then
  3689.                 echo "$IPSEC_EAP_USERNAME : EAP $IPSEC_EAP_PASSWORD" >> $IPSEC_SECRET_FILE
  3690.             fi
  3691.             if [ "$IPSEC_RIGHT_AUTH" = "psk" -a "$IPSEC_IKE_VERSION" = "ikev2" ];then
  3692.                 if [ "$IPSEC_LEFT_ID" != "" -a "$IPSEC_RIGHT_ID" != "" -a "$IPSEC_RIGHT_PSK" != "" ];then
  3693.                     echo "DEBUG_LOG : Setting RIGHT_PSK to $IPSEC_RIGHT_ID $IPSEC_LEFT_ID : PSK $IPSEC_RIGHT_PSK"
  3694.                     echo "$IPSEC_RIGHT_ID $IPSEC_LEFT_ID : PSK $IPSEC_RIGHT_PSK" >> $IPSEC_SECRET_FILE
  3695.                 fi
  3696.             fi
  3697.             ;;
  3698.         "psk")
  3699.             if [ "$IPSEC_LEFT_ID" != "" -a "$IPSEC_RIGHT_ID" != "" ];then
  3700.                 echo "DEBUG_LOG : Setting LEFT_PSK to $IPSEC_LEFT_ID $IPSEC_RIGHT_ID : PSK $IPSEC_LEFT_PSK"
  3701.                 echo "$IPSEC_LEFT_ID $IPSEC_RIGHT_ID : PSK $IPSEC_LEFT_PSK" >> $IPSEC_SECRET_FILE
  3702.                 if [ "$IPSEC_RIGHT_AUTH" = "psk" -a "$IPSEC_RIGHT_PSK" != "" -a "$IPSEC_IKE_VERSION" = "ikev2" ];then
  3703.                     echo "DEBUG_LOG : Setting RIGHT_PSK to $IPSEC_RIGHT_ID $IPSEC_LEFT_ID : PSK $IPSEC_RIGHT_PSK"
  3704.                     echo "$IPSEC_RIGHT_ID $IPSEC_LEFT_ID : PSK $IPSEC_RIGHT_PSK" >> $IPSEC_SECRET_FILE
  3705.                 fi
  3706.             fi
  3707.             ;;
  3708.     esac
  3709.     elif [ "$tunnel" = "secondary" ];then
  3710.         case $IPSEC_LEFT_AUTH_2 in
  3711.         "xauth")
  3712.             # else handled in handle_vlan_route
  3713.             echo "DEBUG_LOG : LEFT : $IPSEC_LEFT_AUTH_2 and USERNAME : $IPSEC_XAUTH_USERNAME_2"
  3714.             if [ "$IPSEC_XAUTH_USERNAME_2" != "" ];then
  3715.                 echo "$IPSEC_XAUTH_USERNAME_2 : XAUTH $IPSEC_XAUTH_PASSWORD_2" >> $IPSEC_SECRET_FILE
  3716.             fi
  3717.             if [ "$IPSEC_RIGHT_AUTH_2" = "psk" -a "$IPSEC_IKE_VERSION_2" = "ikev2" -a "$IPSEC_RIGHT_PSK" != "" ];then
  3718.                 if [ "$IPSEC_LEFT_ID_2" != "" -a "$IPSEC_RIGHT_ID_2" != "" ];then
  3719.                     echo "$IPSEC_LEFT_ID_2 $IPSEC_RIGHT_ID_2 : PSK $IPSEC_LEFT_PSK_2" >> $IPSEC_SECRET_FILE
  3720.                 fi
  3721.             fi
  3722.         ;;
  3723.         "eap")
  3724.             # else handled in handle_vlan_route
  3725.             echo "DEBUG_LOG : LEFT :  $IPSEC_LEFT_AUTH_2 and USERNAME : $IPSEC_EAP_USERNAME_2"
  3726.             if [ "$IPSEC_EAP_USERNAME_2" != "" ];then
  3727.                 echo "$IPSEC_EAP_USERNAME_2 : EAP $IPSEC_EAP_PASSWORD_2" >> $IPSEC_SECRET_FILE
  3728.             fi
  3729.             if [ "$IPSEC_RIGHT_AUTH_2" = "psk" -a "$IPSEC_IKE_VERSION_2" = "ikev2" ];then
  3730.                 if [ "$IPSEC_LEFT_ID_2" != "" -a "$IPSEC_RIGHT_ID_2" != "" -a "$IPSEC_RIGHT_PSK" != "" ];then
  3731.                     echo "DEBUG_LOG : Setting RIGHT_PSK to $IPSEC_RIGHT_ID_2 $IPSEC_LEFT_ID_2 : PSK $IPSEC_RIGHT_PSK_2"
  3732.                     echo "IPSEC_RIGHT_ID_2 $IPSEC_LEFT_ID_2 : PSK $IPSEC_RIGHT_PSK_2" >> $IPSEC_SECRET_FILE
  3733.                 fi
  3734.             fi
  3735.             ;;
  3736.         "psk")
  3737.             if [ "$IPSEC_LEFT_ID_2" != "" -a "$IPSEC_RIGHT_ID_2" != "" ];then
  3738.                 echo "$IPSEC_LEFT_ID_2 $IPSEC_RIGHT_ID_2 : PSK $IPSEC_LEFT_PSK_2" >> $IPSEC_SECRET_FILE
  3739.                 echo "DEBUG_LOG : Setting LEFT_PSK to $IPSEC_LEFT_ID_2 $IPSEC_RIGHT_ID_2 : PSK $IPSEC_LEFT_PSK_2"
  3740.                 if [ "$IPSEC_RIGHT_AUTH_2" = "psk" -a "$IPSEC_RIGHT_PSK_2" != "" -a "$IPSEC_IKE_VERSION_2" = "ikev2" ];then
  3741.                     echo "DEBUG_LOG : Setting RIGHT_PSK to $IPSEC_RIGHT_ID_2 $IPSEC_LEFT_ID_2 : PSK $IPSEC_RIGHT_PSK_2"
  3742.                     echo "$IPSEC_RIGHT_ID_2 $IPSEC_LEFT_ID_2 : PSK $IPSEC_RIGHT_PSK_2" >> $IPSEC_SECRET_FILE
  3743.                 fi
  3744.             fi
  3745.             ;;
  3746.         esac
  3747.     fi
  3748. }
  3749.  
  3750. set_secondary_ipsec_conf()
  3751. {
  3752.     # Handling blank entry
  3753.     if [ "$IPSEC_IKE_ALGO_2" = "" ];then
  3754.         set_default_cipher 128
  3755.         IPSEC_IKE_ALGO_2=$CIPHER
  3756.     fi
  3757.     if [ "$IPSEC_PHASE2_ALGO_2" = "" ];then
  3758.         set_default_cipher 128
  3759.         IPSEC_PHASE2_ALGO_2=$CIPHER
  3760.     fi
  3761.     IPSEC_CONF_FILE="$IPSEC_DIR/secondary_ipsec.conf"
  3762.     IPSEC_SECRET_FILE="$IPSEC_DIR/secondary_ipsec.secrets"
  3763.     if [ "$IPSEC_RESTRICT_PHASE2_2" = "1" ];then
  3764.         IPSEC_PHASE2_ALGO_2=$IPSEC_PHASE2_ALGO_2"!"
  3765.     fi
  3766.     if [ "$IPSEC_RESTRICT_IKE_2" = "1" ];then
  3767.         IPSEC_IKE_ALGO_2=$IPSEC_IKE_ALGO_2"!"
  3768.     fi
  3769.  
  3770.     # set left authentication
  3771.     if [ "$sec_network_vlan" = "0" ];then
  3772.         local_iface="br0"
  3773.     else
  3774.         local_iface="br0.$sec_network_vlan"
  3775.     fi
  3776.     local_ip=`ifconfig $local_iface | grep inet\ addr | cut -f 2 -d ":" | cut -f 1 -d " "`
  3777.     get_ipsec_ids $local_ip
  3778.     get_ipsec_username
  3779.  
  3780.     echo "conn network"$CURRENT_SECTION_ID"_secondary" >> $IPSEC_CONF_FILE
  3781.     if [ "$IPSEC_LEFT_AUTH_2" = "xauth" ]; then
  3782.         if [ "$IPSEC_RIGHT_AUTH_2" = "psk" ];then
  3783.             echo "  leftauth=psk" >> $IPSEC_CONF_FILE
  3784.             echo "  leftauth2=xauth" >> $IPSEC_CONF_FILE
  3785.         else
  3786.             echo "  leftauth=$IPSEC_LEFT_AUTH_2" >> $IPSEC_CONF_FILE
  3787.         fi
  3788.         # Adding to xauth entries secrets file
  3789.     else
  3790.         echo "  leftauth=$IPSEC_LEFT_AUTH_2" >> $IPSEC_CONF_FILE
  3791.     fi
  3792.  
  3793.     # Handling if defaults to IP because IP maynot be available in handle_vlan_route script
  3794.     if [ "$IPSEC_LEFT_AUTH_2" = "eap" ];then
  3795.         echo "  eap_identity=$IPSEC_EAP_USERNAME_2" >> $IPSEC_CONF_FILE
  3796.         echo "  aaa_identity=\"$IPSEC_AAA_IDENTITY_2\"" >> $IPSEC_CONF_FILE
  3797.         sed -i "s/.*leftauth=eap/   leftauth=$IPSEC_EAP_METHOD_2/" $IPSEC_CONF_FILE
  3798.     elif [ "$IPSEC_LEFT_AUTH_2" = "xauth" ]; then
  3799.         echo "  xauth_identity=$IPSEC_XAUTH_USERNAME_2" >> $IPSEC_CONF_FILE
  3800.     fi
  3801.  
  3802.     echo "  leftid=$IPSEC_LEFT_ID_2" >> $IPSEC_CONF_FILE
  3803.     echo "  right=$IPSEC_SECONDARY_REMOTE" >> $IPSEC_CONF_FILE
  3804.     echo "  rightid=$IPSEC_RIGHT_ID_2" >> $IPSEC_CONF_FILE
  3805.     echo "  rightauth=$IPSEC_RIGHT_AUTH_2" >> $IPSEC_CONF_FILE
  3806.     echo "  keyexchange=$IPSEC_IKE_VERSION_2" >> $IPSEC_CONF_FILE
  3807.     echo "  left=$IPSEC_LOCAL_IP" >> $IPSEC_CONF_FILE
  3808.  
  3809.     if [ "$IPSEC_VIRTUAL_IP_ENABLED_2" = "1" ];then
  3810.         echo "  leftsourceip=%config" >> $IPSEC_CONF_FILE
  3811.     fi
  3812.     echo "  leftupdown=/opt/ap/ipsec_updown" >> $IPSEC_CONF_FILE
  3813.     echo "  auto=route" >> $IPSEC_CONF_FILE
  3814.     if [ "$IPSEC_DPD_ACTION_2" = "" ];then
  3815.         IPSEC_DPD_ACTION_2="none"
  3816.     fi
  3817.     if [ "$IPSEC_DPD_DELAY_2" = "" ];then
  3818.         IPSEC_DPD_DELAY_2="30"
  3819.     fi
  3820.     if [ "$IPSEC_DPD_TIMEOUT_2" = "" ];then
  3821.         IPSEC_DPD_TIMEOUT_2="150"
  3822.     fi
  3823.     echo "  ikelifetime=$IPSEC_IKE_LIFETIME_2" >> $IPSEC_CONF_FILE
  3824.     echo "  lifetime=$IPSEC_PHASE2_LIFETIME_2" >> $IPSEC_CONF_FILE
  3825.     if [ "$IPSEC_DPD_ENABLED_2" = "1" ];then
  3826.         echo "  dpdaction=$IPSEC_DPD_ACTION_2" >> $IPSEC_CONF_FILE
  3827.         echo "  dpddelay=$IPSEC_DPD_DELAY_2" >> $IPSEC_CONF_FILE
  3828.         echo "  dpdtimeout=$IPSEC_DPD_TIMEOUT_2" >> $IPSEC_CONF_FILE
  3829.     fi
  3830.     if [ "$IPSEC_PHASE2_METHOD_2" = "esp" ];then
  3831.         echo "  esp=$IPSEC_PHASE2_ALGO_2" >> $IPSEC_CONF_FILE
  3832.     else
  3833.         echo "  ah=$IPSEC_PHASE2_ALGO_2" >> $IPSEC_CONF_FILE
  3834.     fi
  3835.     if [ "$IPSEC_IKE_ALGO_2" != "" ];then
  3836.         echo "  ike=$IPSEC_IKE_ALGO_2" >> $IPSEC_CONF_FILE
  3837.     fi
  3838.     echo "  type=$IPSEC_TUNNEL_TYPE_2" >> $IPSEC_CONF_FILE
  3839.     if [ "$IPSEC_MODE_2" = "2" ];then
  3840.         echo "  aggressive=yes" >> $IPSEC_CONF_FILE
  3841.     else
  3842.         echo "  aggressive=no" >> $IPSEC_CONF_FILE
  3843.     fi
  3844.     GRE_REMOTE_IP=`cat /tmp/network$CURRENT_SECTION_ID/network.conf | grep "SECONDARY_REMOTE_IP" | sed "s/SECONDARY_REMOTE_IP=//g"`
  3845.     echo "  rightsubnet=$GRE_REMOTE_IP[47]" >> $IPSEC_CONF_FILE
  3846.     set_ipsec_secret "secondary"
  3847. }
  3848.  
  3849. set_default_cipher()
  3850. {
  3851.     LENGTH=$1
  3852.     CIPHER="aes${LENGTH}-sha2_256-modp2048,blowfish${LENGTH}-sha2_256-modp2048,camellia${LENGTH}-sha2_256-modp2048,aes${LENGTH}-sha1-modp1024,blowfish${LENGTH}-sha1-modp1024,camellia${LENGTH}-sha1-modp1024,3des-md5-modp768"
  3853. }
  3854.  
  3855. set_primary_ipsec_conf()
  3856. {
  3857.     # Handling blank entry
  3858.     if [ "$IPSEC_IKE_ALGO" = "" ];then
  3859.         set_default_cipher 128
  3860.         IPSEC_IKE_ALGO=$CIPHER
  3861.     fi
  3862.     if [ "$IPSEC_PHASE2_ALGO" = "" ];then
  3863.         set_default_cipher 128
  3864.         IPSEC_PHASE2_ALGO=$CIPHER
  3865.     fi
  3866.  
  3867.     IPSEC_CONF_FILE="$IPSEC_DIR/primary_ipsec.conf"
  3868.     IPSEC_SECRET_FILE="$IPSEC_DIR/primary_ipsec.secrets"
  3869.     if [ "$IPSEC_RESTRICT_PHASE2" = "1" ];then
  3870.         IPSEC_PHASE2_ALGO=$IPSEC_PHASE2_ALGO"!"
  3871.     fi
  3872.     if [ "$IPSEC_RESTRICT_IKE" = "1" ];then
  3873.         IPSEC_IKE_ALGO=$IPSEC_IKE_ALGO"!"
  3874.     fi
  3875.     # set left authentication
  3876.     if [ "$primary_network_vlan" = "0" ];then
  3877.         local_iface="br0"
  3878.     else
  3879.         local_iface="br0.$primary_network_vlan"
  3880.     fi
  3881.     local_ip=`ifconfig $local_iface | grep inet\ addr | cut -f 2 -d ":" | cut -f 1 -d " "`
  3882.     get_ipsec_ids $local_ip
  3883.     get_ipsec_username
  3884.  
  3885.     echo "conn network"$CURRENT_SECTION_ID"_primary" >> $IPSEC_CONF_FILE
  3886.     if [ "$IPSEC_LEFT_AUTH" = "xauth" ]; then
  3887.         if [ "$IPSEC_RIGHT_AUTH" = "psk" ];then
  3888.             echo "  leftauth=psk" >> $IPSEC_CONF_FILE
  3889.             echo "  leftauth2=xauth" >> $IPSEC_CONF_FILE
  3890.         else
  3891.             echo "  leftauth=$IPSEC_LEFT_AUTH" >> $IPSEC_CONF_FILE
  3892.         fi
  3893.     else
  3894.         echo "  leftauth=$IPSEC_LEFT_AUTH" >> $IPSEC_CONF_FILE
  3895.     fi
  3896.  
  3897.     # Handling if defaults to IP because IP maynot be available in handle_vlan_route script
  3898.     if [ "$IPSEC_LEFT_AUTH" = "eap" ];then
  3899.         echo "  eap_identity=$IPSEC_EAP_USERNAME" >> $IPSEC_CONF_FILE
  3900.         echo "  aaa_identity=\"$IPSEC_AAA_IDENTITY\"" >> $IPSEC_CONF_FILE
  3901.         sed -i "s/.*leftauth.*/ leftauth=$IPSEC_EAP_METHOD/" $IPSEC_CONF_FILE
  3902.     elif [ "$IPSEC_LEFT_AUTH" = "xauth" ]; then
  3903.         echo "  xauth_identity=$IPSEC_XAUTH_USERNAME" >> $IPSEC_CONF_FILE
  3904.     fi
  3905.  
  3906.     echo "  leftid=$IPSEC_LEFT_ID" >> $IPSEC_CONF_FILE
  3907.     echo "  right=$IPSEC_PRIMARY_REMOTE" >> $IPSEC_CONF_FILE
  3908.     echo "  rightid=$IPSEC_RIGHT_ID" >> $IPSEC_CONF_FILE
  3909.     echo "  rightauth=$IPSEC_RIGHT_AUTH" >> $IPSEC_CONF_FILE
  3910.     echo "  keyexchange=$IPSEC_IKE_VERSION" >> $IPSEC_CONF_FILE
  3911.     echo "  left=$IPSEC_LOCAL_IP" >> $IPSEC_CONF_FILE
  3912.  
  3913.     if [ "$IPSEC_VIRTUAL_IP_ENABLED" = "1" ];then
  3914.         echo "  leftsourceip=%config" >> $IPSEC_CONF_FILE
  3915.     fi
  3916.     echo "  leftupdown=/opt/ap/ipsec_updown" >> $IPSEC_CONF_FILE
  3917.     echo "  auto=route" >> $IPSEC_CONF_FILE
  3918.     if [ "$IPSEC_DPD_ACTION" = "" ];then
  3919.         IPSEC_DPD_ACTION="none"
  3920.     fi
  3921.     if [ "$IPSEC_DPD_DELAY" = "" ];then
  3922.         IPSEC_DPD_DELAY="30"
  3923.     fi
  3924.     if [ "$IPSEC_DPD_TIMEOUT" = "" ];then
  3925.         IPSEC_DPD_TIMEOUT="150"
  3926.     fi
  3927.     echo "  ikelifetime=$IPSEC_IKE_LIFETIME" >> $IPSEC_CONF_FILE
  3928.     echo "  lifetime=$IPSEC_PHASE2_LIFETIME" >> $IPSEC_CONF_FILE
  3929.     if [ "$IPSEC_DPD_ENABLED" = "1" ];then
  3930.         echo "  dpdaction=$IPSEC_DPD_ACTION" >> $IPSEC_CONF_FILE
  3931.         echo "  dpddelay=$IPSEC_DPD_DELAY" >> $IPSEC_CONF_FILE
  3932.         echo "  dpdtimeout=$IPSEC_DPD_TIMEOUT" >> $IPSEC_CONF_FILE
  3933.     fi
  3934.     if [ "$IPSEC_PHASE2_METHOD" = "esp" ];then
  3935.         echo "  esp=$IPSEC_PHASE2_ALGO" >> $IPSEC_CONF_FILE
  3936.     else
  3937.         echo "  ah=$IPSEC_PHASE2_ALGO" >> $IPSEC_CONF_FILE
  3938.     fi
  3939.     if [ "$IPSEC_IKE_ALGO" != "" ];then
  3940.         echo "  ike=$IPSEC_IKE_ALGO" >> $IPSEC_CONF_FILE
  3941.     fi
  3942.     echo "  type=$IPSEC_TUNNEL_TYPE" >> $IPSEC_CONF_FILE
  3943.     if [ "$IPSEC_MODE" = "2" ];then
  3944.         echo "  aggressive=yes" >> $IPSEC_CONF_FILE
  3945.     else
  3946.         echo "  aggressive=no" >> $IPSEC_CONF_FILE
  3947.     fi
  3948.     GRE_REMOTE_IP=`cat /tmp/network$CURRENT_SECTION_ID/network.conf | grep "PRIMARY_REMOTE_IP" | sed "s/PRIMARY_REMOTE_IP=//g"`
  3949.     echo "  rightsubnet=$GRE_REMOTE_IP[47]" >> $IPSEC_CONF_FILE
  3950.     set_ipsec_secret "primary"
  3951. }
  3952.  
  3953. init_network_section()
  3954. {
  3955.     NETWORK_PROFILE_ID=`cat $1 | grep NETWORK_PROFILE_ID | xargs | cut -d "=" -f2`
  3956.     NETWORK_DIR="/tmp/network$CURRENT_SECTION_ID"
  3957.     EOGRE_PRIMARY_KEY=""
  3958.     EOGRE_SECONDARY_KEY=""
  3959.     NETWORK_TYPE=0
  3960.     EOGRE_PRIMARY_KEY=""
  3961.     sec_network_vlan=0
  3962.     primary_network_vlan=0
  3963.     EOGRE_SECONDARY_KEY=""
  3964.     is_secondary_network_enabled=0
  3965.     NETWORK_PING_RETRY_COUNT=0
  3966.     NETWORK_PROBE_INTERVAL=0
  3967.     NETWORK_PING_TIMEOUT=0
  3968.     PRIMARY_PRIORITY_ENABLED=0
  3969.     IPSEC_ENABLED=0
  3970.     IPSEC_PRIMARY_REMOTE=""
  3971.     IPSEC_SECONDARY_REMOTE=""
  3972.     IPSEC_LEFT_ID=""
  3973.     IPSEC_RIGHT_ID=""
  3974.     IPSEC_MODE=""
  3975.     IPSEC_TUNNEL_TYPE=""
  3976.     IPSEC_IKE_VERSION=""
  3977.     IPSEC_DPD_TIMEOUT=""
  3978.     IPSEC_DPD_DELAY=""
  3979.     IPSEC_DPD_ACTION=""
  3980.     IPSEC_LEFT_AUTH=""
  3981.     IPSEC_RIGHT_AUTH=""
  3982.     IPSEC_LEFT_PSK=""
  3983.     IPSEC_RIGHT_PSK=""
  3984.     IPSEC_VIRTUAL_IP_ENABLED=""
  3985.     IPSEC_XAUTH_PASSWORD=""
  3986.     IPSEC_XAUTH_USERNAME=""
  3987.     IPSEC_EAP_USERNAME=""
  3988.     IPSEC_EAP_PASSWORD=""
  3989.     IPSEC_AUTH_CA_MD5SUM=""
  3990.     IPSEC_AUTH_CA_FILE=""
  3991.     IPSEC_RADIUS_CA_FILE=""
  3992.     IPSEC_RADIUS_CA_MD5SUM=""
  3993.     IPSEC_PHASE2_METHOD=""
  3994.     IPSEC_IKE_ALGO=""
  3995.     IPSEC_PHASE2_ALGO=""
  3996.     IPSEC_RESTRICT_PHASE2=""
  3997.     IPSEC_RESTRICT_IKE=""
  3998.     IPSEC_AAA_IDENTITY=""
  3999.     IPSEC_IKE_LIFETIME=""
  4000.     IPSEC_DPD_ENABLED=""
  4001.     IPSEC_PHASE2_LIFETIME=""
  4002.     IPSEC_EAP_METHOD=""
  4003.  
  4004.     IPSEC_LEFT_ID_2=""
  4005.     IPSEC_RIGHT_ID_2=""
  4006.     IPSEC_MODE_2=""
  4007.     IPSEC_TUNNEL_TYPE_2=""
  4008.     IPSEC_IKE_VERSION_2=""
  4009.     IPSEC_DPD_TIMEOUT_2=""
  4010.     IPSEC_DPD_DELAY_2=""
  4011.     IPSEC_DPD_ACTION_2=""
  4012.     IPSEC_LEFT_AUTH_2=""
  4013.     IPSEC_RIGHT_AUTH_2=""
  4014.     IPSEC_LEFT_PSK_2=""
  4015.     IPSEC_RIGHT_PSK_2=""
  4016.     IPSEC_VIRTUAL_IP_ENABLED_2=""
  4017.     IPSEC_XAUTH_PASSWORD_2=""
  4018.     IPSEC_XAUTH_USERNAME_2=""
  4019.     IPSEC_EAP_USERNAME_2=""
  4020.     IPSEC_EAP_PASSWORD_2=""
  4021.     IPSEC_AUTH_CA_MD5SUM_2=""
  4022.     IPSEC_AUTH_CA_FILE_2=""
  4023.     IPSEC_RADIUS_CA_FILE_2=""
  4024.     IPSEC_RADIUS_CA_MD5SUM_2=""
  4025.     IPSEC_PHASE2_METHOD_2=""
  4026.     IPSEC_IKE_ALGO_2=""
  4027.     IPSEC_PHASE2_ALGO_2=""
  4028.     IPSEC_RESTRICT_PHASE2_2=""
  4029.     IPSEC_RESTRICT_IKE_2=""
  4030.     IPSEC_AAA_IDENTITY_2=""
  4031.     IPSEC_IKE_LIFETIME_2=""
  4032.     IPSEC_DPD_ENABLED_2=""
  4033.     IPSEC_PHASE2_LIFETIME_2=""
  4034.     IPSEC_EAP_METHOD_2=""
  4035. }
  4036.  
  4037. process_network_section()
  4038. {
  4039.     init_network_section $1
  4040.     if [ -d "$NETWORK_DIR" ]; then
  4041.         rm -rf $NETWORK_DIR >/dev/null 2>&1
  4042.     fi
  4043.     mkdir $NETWORK_DIR >/dev/null 2>&1
  4044.     OUT_FILE=`echo $NETWORK_DIR/network.conf`
  4045.  
  4046.     echo "" > $OUT_FILE
  4047.  
  4048.     echo "NETWORK_PROFILE_ID=$NETWORK_PROFILE_ID" > $OUT_FILE
  4049.  
  4050.     while read -r line
  4051.     do
  4052.         param=`echo -E "$line" | cut -f1 -d"=" | xargs`
  4053.         value=`echo -E "$line" | cut -f2- -d"="`
  4054.  
  4055.         if [ -z "$param" ];then
  4056.             echo "Paramname blank in line ($line). Ignoring.."
  4057.             continue
  4058.         fi
  4059.  
  4060.         case $param in
  4061.  
  4062.             "NETWORK_TYPE")
  4063.                 # Disabling Network type 2 of IPSEC by overriding
  4064.                 if [ "$value" = "2" ];then
  4065.                     value=1
  4066.                 fi
  4067.                 NETWORK_TYPE=$value
  4068.                 echo "NETWORK_TYPE=$value" >> $OUT_FILE
  4069.                 ;;
  4070.             "PRIMARY_NETWORK_VLAN")
  4071.                 sanitize_vlan_id $value
  4072.                 primary_network_vlan=$?
  4073.                 echo "PRIMARY_NETWORK_VLAN=$primary_network_vlan" >> $OUT_FILE
  4074.                 ;;
  4075.             "PRIMARY_REMOTE_IP")
  4076.                 echo "PRIMARY_REMOTE_IP=$value" >> $OUT_FILE
  4077.                 ;;
  4078.             "EOGRE_PRIMARY_KEY")
  4079.                 EOGRE_PRIMARY_KEY=$value
  4080.                 ;;
  4081.             "SECONDARY_NETWORK_VLAN")
  4082.                 sanitize_vlan_id $value
  4083.                 sec_network_vlan=$?
  4084.                 echo "SECONDARY_NETWORK_VLAN=$sec_network_vlan" >> $OUT_FILE
  4085.                 ;;
  4086.             "SECONDARY_REMOTE_IP")
  4087.                 echo "SECONDARY_REMOTE_IP=$value" >> $OUT_FILE
  4088.                 ;;
  4089.             "EOGRE_SECONDARY_KEY")
  4090.                 EOGRE_SECONDARY_KEY=$value
  4091.                 ;;
  4092.             "SECONDARY_NETWORK_ENABLED")
  4093.                 if [ "$value" = "1" ];then
  4094.                     echo "SECONDARY_NETWORK_ENABLED=1" >> $OUT_FILE
  4095.                     is_secondary_network_enabled=1
  4096.                 fi
  4097.                 ;;
  4098.             "NETWORK_PING_TIMEOUT")
  4099.                     if [ "$value" = "" ];then
  4100.                         value=60
  4101.                     fi
  4102.                     echo "NETWORK_PING_TIMEOUT=$value" >> $OUT_FILE
  4103.                 ;;
  4104.             "NETWORK_PING_RETRY_COUNT")
  4105.                     if [ "$value" = "" ];then
  4106.                         value=3
  4107.                     fi
  4108.                     echo "NETWORK_PING_RETRY_COUNT=$value" >> $OUT_FILE
  4109.                 ;;
  4110.             "NETWORK_PROBE_INTERVAL")
  4111.                     if [ "$value" = "" ];then
  4112.                         value=300
  4113.                     fi
  4114.                     echo "NETWORK_PROBE_INTERVAL=$value" >> $OUT_FILE
  4115.                 ;;
  4116.             "PRIMARY_PRIORITY_ENABLED")
  4117.                     if [ "$value" = "" ];then
  4118.                         value=1
  4119.                     fi
  4120.                     echo "PRIMARY_PRIORITY_ENABLED=$value" >> $OUT_FILE
  4121.                 ;;
  4122.             "IPSEC_VIRTUAL_IP_ENABLED")
  4123.                     IPSEC_VIRTUAL_IP_ENABLED=$value
  4124.                     echo "IPSEC_VIRTUAL_IP_ENABLED=$value" >> $OUT_FILE
  4125.                 ;;
  4126.             "IPSEC_ENABLED")
  4127.                     echo "IPSEC_ENABLED=$value" >> $OUT_FILE
  4128.                 ;;
  4129.             "IPSEC_PRIMARY_REMOTE")
  4130.                 IPSEC_PRIMARY_REMOTE=$value
  4131.                 echo "IPSEC_PRIMARY_REMOTE=$value" >> $OUT_FILE
  4132.                 ;;
  4133.             "IPSEC_SECONDARY_REMOTE")
  4134.                 IPSEC_SECONDARY_REMOTE=$value
  4135.                 echo "IPSEC_SECONDARY_REMOTE=$value" >> $OUT_FILE
  4136.                 ;;
  4137.             "IPSEC_LEFT_ID")
  4138.                 if [ "$value" != "" ];then
  4139.                     IPSEC_LEFT_ID=\"$value\"
  4140.                 fi
  4141.                 echo "IPSEC_LEFT_ID=$IPSEC_LEFT_ID" >> $OUT_FILE
  4142.                 ;;
  4143.             "IPSEC_LEFT_ID_2")
  4144.                 if [ "$value" != "" ];then
  4145.                     IPSEC_LEFT_ID_2=\"$value\"
  4146.                 fi
  4147.                 echo "IPSEC_LEFT_ID_2=$IPSEC_LEFT_ID_2" >> $OUT_FILE
  4148.                 ;;
  4149.             "IPSEC_RIGHT_ID")
  4150.                 if [ "$value" != "" ];then
  4151.                     IPSEC_RIGHT_ID=\"$value\"
  4152.                 fi
  4153.                 echo "IPSEC_RIGHT_ID=$IPSEC_RIGHT_ID" >> $OUT_FILE
  4154.                 ;;
  4155.             "IPSEC_RIGHT_ID_2")
  4156.                 if [ "$value" != "" ];then
  4157.                     IPSEC_RIGHT_ID_2=\"$value\"
  4158.                 fi
  4159.                 echo "IPSEC_RIGHT_ID_2=$IPSEC_RIGHT_ID_2" >> $OUT_FILE
  4160.                 ;;
  4161.             "IPSEC_MODE")
  4162.                 IPSEC_MODE=$value
  4163.                 echo "IPSEC_MODE=$IPSEC_MODE" >> $OUT_FILE
  4164.                 ;;
  4165.             "IPSEC_MODE_2")
  4166.                 IPSEC_MODE_2=$value
  4167.                 echo "IPSEC_MODE_2=$IPSEC_MODE_2" >> $OUT_FILE
  4168.                 ;;
  4169.             "IPSEC_TUNNEL_TYPE")
  4170.                 if [ "$value" = "" -o "$value" = "1" ];then
  4171.                     IPSEC_TUNNEL_TYPE="tunnel"
  4172.                 else
  4173.                     IPSEC_TUNNEL_TYPE="transport"
  4174.                 fi
  4175.                 echo "IPSEC_TUNNEL_TYPE=$IPSEC_TUNNEL_TYPE" >> $OUT_FILE
  4176.                 ;;
  4177.             "IPSEC_TUNNEL_TYPE_2")
  4178.                 if [ "$value" = "" -o "$value" = "1" ];then
  4179.                     IPSEC_TUNNEL_TYPE_2="tunnel"
  4180.                 else
  4181.                     IPSEC_TUNNEL_TYPE_2="transport"
  4182.                 fi
  4183.                 echo "IPSEC_TUNNEL_TYPE_2=$IPSEC_TUNNEL_TYPE" >> $OUT_FILE
  4184.                 ;;
  4185.             "IPSEC_IKE_VERSION")
  4186.                 IPSEC_IKE_VERSION="ikev"$value
  4187.                 echo "IPSEC_IKE_VERSION=$IPSEC_IKE_VERSION" >> $OUT_FILE
  4188.                 ;;
  4189.             "IPSEC_IKE_VERSION_2")
  4190.                 if [ "$value" = "5" ];then
  4191.                     value=1
  4192.                 else
  4193.                     value=2
  4194.                 fi
  4195.                 IPSEC_IKE_VERSION_2="ikev"$value
  4196.                 echo "IPSEC_IKE_VERSION_2=$IPSEC_IKE_VERSION_2" >> $OUT_FILE
  4197.                 ;;
  4198.             "IPSEC_PHASE2_METHOD")
  4199.                 IPSEC_PHASE2_METHOD=$value
  4200.                 if [ "$IPSEC_PHASE2_METHOD" = "" -o "$IPSEC_PHASE2_METHOD" = "3" ];then
  4201.                     echo "IPSEC_PHASE2_METHOD=esp" >> $OUT_FILE
  4202.                     IPSEC_PHASE2_METHOD="esp"
  4203.                 else
  4204.                     echo "IPSEC_PHASE2_METHOD=ah" >> $OUT_FILE
  4205.                     IPSEC_PHASE2_METHOD="ah"
  4206.                 fi
  4207.                 ;;
  4208.             "IPSEC_PHASE2_METHOD_2")
  4209.                 IPSEC_PHASE2_METHOD_2=$value
  4210.                 if [ "$IPSEC_PHASE2_METHOD_2" = "" -o "$IPSEC_PHASE2_METHOD_2" = "7" ];then
  4211.                     echo "IPSEC_PHASE2_METHOD_2=esp" >> $OUT_FILE
  4212.                     IPSEC_PHASE2_METHOD_2="esp"
  4213.                 else
  4214.                     echo "IPSEC_PHASE2_METHOD_2=ah" >> $OUT_FILE
  4215.                     IPSEC_PHASE2_METHOD_2="ah"
  4216.                 fi
  4217.                 ;;
  4218.             "IPSEC_DPD_DELAY")
  4219.                 IPSEC_DPD_DELAY=$value
  4220.                 if [ "$IPSEC_DPD_DELAY" = "" ];then
  4221.                     IPSEC_DPD_DELAY=30
  4222.                 fi
  4223.                 ;;
  4224.             "IPSEC_DPD_DELAY_2")
  4225.                 IPSEC_DPD_DELAY_2=$value
  4226.                 if [ "$IPSEC_DPD_DELAY_2" = "" ];then
  4227.                     IPSEC_DPD_DELAY_2=30
  4228.                 fi
  4229.                 ;;
  4230.  
  4231.             "IPSEC_DPD_TIMEOUT")
  4232.                 IPSEC_DPD_TIMEOUT=$value
  4233.                 if [ "$IPSEC_DPD_TIMEOUT" = "" ];then
  4234.                     IPSEC_DPD_TIMEOUT=150
  4235.                 fi
  4236.                 ;;
  4237.             "IPSEC_DPD_TIMEOUT_2")
  4238.                 IPSEC_DPD_TIMEOUT_2=$value
  4239.                 if [ "$IPSEC_DPD_TIMEOUT_2" = "" ];then
  4240.                     IPSEC_DPD_TIMEOUT_2=150
  4241.                 fi
  4242.                 ;;
  4243.             "IPSEC_DPD_ACTION")
  4244.                 IPSEC_DPD_ACTION=$value
  4245.                 if [ "$IPSEC_DPD_ACTION" = "" -o "$IPSEC_DPD_ACTION" = "1" ];then
  4246.                     IPSEC_DPD_ACTION="none"
  4247.                 elif [ "$IPSEC_DPD_ACTION" = "2" ];then
  4248.                     IPSEC_DPD_ACTION="restart"
  4249.                 fi
  4250.                 ;;
  4251.             "IPSEC_DPD_ACTION_2")
  4252.                 IPSEC_DPD_ACTION_2=$value
  4253.                 if [ "$IPSEC_DPD_ACTION_2" = "" -o "$IPSEC_DPD_ACTION_2" = "1" ];then
  4254.                     IPSEC_DPD_ACTION_2="none"
  4255.                 elif [ "$IPSEC_DPD_ACTION_2" = "2" ];then
  4256.                     IPSEC_DPD_ACTION_2="restart"
  4257.                 fi
  4258.                 ;;
  4259.             "IPSEC_XAUTH_PASSWORD")
  4260.                 if [ "$value" != "" ];then
  4261.                     IPSEC_XAUTH_PASSWORD=\"$value\"
  4262.                 fi
  4263.                     echo "IPSEC_XAUTH_PASSWORD=$IPSEC_XAUTH_PASSWORD" >> $OUT_FILE
  4264.                 ;;
  4265.             "IPSEC_XAUTH_PASSWORD_2")
  4266.                 if [ "$value" != "" ];then
  4267.                     IPSEC_XAUTH_PASSWORD_2=\"$value\"
  4268.                 fi
  4269.                 echo "IPSEC_XAUTH_PASSWORD_2=$IPSEC_XAUTH_PASSWORD_2" >> $OUT_FILE
  4270.                 ;;
  4271.             "IPSEC_XAUTH_USERNAME")
  4272.                 if [ "$value" != "" ];then
  4273.                     IPSEC_XAUTH_USERNAME=\"$value\"
  4274.                 fi
  4275.                 echo "IPSEC_XAUTH_USERNAME=$IPSEC_XAUTH_USERNAME" >> $OUT_FILE
  4276.                 ;;
  4277.             "IPSEC_XAUTH_USERNAME_2")
  4278.                 if [ "$value" != "" ];then
  4279.                     IPSEC_XAUTH_USERNAME_2=\"$value\"
  4280.                 fi
  4281.                 echo "IPSEC_XAUTH_USERNAME_2=$IPSEC_XAUTH_USERNAME_2" >> $OUT_FILE
  4282.                 ;;
  4283.             "IPSEC_LEFT_AUTH")
  4284.                 IPSEC_LEFT_AUTH=$value
  4285.                 if [ "$IPSEC_LEFT_AUTH" = "1" ];then
  4286.                     IPSEC_LEFT_AUTH="psk"
  4287.                 elif [ "$IPSEC_LEFT_AUTH" = "2" ];then
  4288.                     IPSEC_LEFT_AUTH="xauth"
  4289.                 elif [ "$IPSEC_LEFT_AUTH" = "3" ];then
  4290.                     IPSEC_LEFT_AUTH="eap"
  4291.                 fi
  4292.                 echo "IPSEC_LEFT_AUTH=$IPSEC_LEFT_AUTH" >> $OUT_FILE
  4293.                 ;;
  4294.             "IPSEC_LEFT_AUTH_2")
  4295.                 IPSEC_LEFT_AUTH_2=$value
  4296.                 if [ "$IPSEC_LEFT_AUTH_2" = "1" ];then
  4297.                     IPSEC_LEFT_AUTH_2="psk"
  4298.                 elif [ "$IPSEC_LEFT_AUTH_2" = "2" ];then
  4299.                     IPSEC_LEFT_AUTH_2="xauth"
  4300.                 elif [ "$IPSEC_LEFT_AUTH_2" = "3" ];then
  4301.                     IPSEC_LEFT_AUTH_2="eap"
  4302.                 fi
  4303.                 echo "IPSEC_LEFT_AUTH_2=$IPSEC_LEFT_AUTH_2" >> $OUT_FILE
  4304.                 ;;
  4305.             "IPSEC_RIGHT_AUTH")
  4306.                 IPSEC_RIGHT_AUTH=$value
  4307.                 if [ "$IPSEC_RIGHT_AUTH" = "1" ];then
  4308.                     IPSEC_RIGHT_AUTH="psk"
  4309.                 elif [ "$IPSEC_RIGHT_AUTH" = "2" ];then
  4310.                     IPSEC_RIGHT_AUTH="pubkey"
  4311.                 fi
  4312.                 echo "IPSEC_RIGHT_AUTH=$IPSEC_RIGHT_AUTH" >> $OUT_FILE
  4313.                 ;;
  4314.             "IPSEC_RIGHT_AUTH_2")
  4315.                 IPSEC_RIGHT_AUTH_2=$value
  4316.                 if [ "$IPSEC_RIGHT_AUTH_2" = "1" ];then
  4317.                     IPSEC_RIGHT_AUTH_2="psk"
  4318.                 elif [ "$IPSEC_RIGHT_AUTH_2" = "2" ];then
  4319.                     IPSEC_RIGHT_AUTH_2="pubkey"
  4320.                 fi
  4321.                 echo "IPSEC_RIGHT_AUTH_2=$IPSEC_RIGHT_AUTH_2" >> $OUT_FILE
  4322.                 ;;
  4323.             "IPSEC_LEFT_PSK")
  4324.                 if [ "$value" != "" ];then
  4325.                     IPSEC_LEFT_PSK=\"$value\"
  4326.                 fi
  4327.                 echo "IPSEC_LEFT_PSK=$IPSEC_LEFT_PSK" >> $OUT_FILE
  4328.                 ;;
  4329.             "IPSEC_LEFT_PSK_2")
  4330.                 if [ "$value" != "" ];then
  4331.                     IPSEC_LEFT_PSK_2=\"$value\"
  4332.                 fi
  4333.                 echo "IPSEC_LEFT_PSK_2=$IPSEC_LEFT_PSK_2" >> $OUT_FILE
  4334.                 ;;
  4335.             "IPSEC_RIGHT_PSK")
  4336.                 if [ "$value" != "" ];then
  4337.                     IPSEC_RIGHT_PSK=\"$value\"
  4338.                 fi
  4339.                 echo "IPSEC_RIGHT_PSK=$IPSEC_RIGHT_PSK" >> $OUT_FILE
  4340.                 ;;
  4341.             "IPSEC_RIGHT_PSK_2")
  4342.                 if [ "$value" != "" ];then
  4343.                     IPSEC_RIGHT_PSK_2=\"$value\"
  4344.                 fi
  4345.                 echo "IPSEC_RIGHT_PSK_2=$IPSEC_RIGHT_PSK_2" >> $OUT_FILE
  4346.                 ;;
  4347.             "IPSEC_EAP_USERNAME")
  4348.                 if [ "$value" != "" ];then
  4349.                     IPSEC_EAP_USERNAME=\"$value\"
  4350.                 fi
  4351.                 echo "IPSEC_EAP_USERNAME=$IPSEC_EAP_USERNAME" >> $OUT_FILE
  4352.                 ;;
  4353.             "IPSEC_EAP_USERNAME_2")
  4354.                 if [ "$value" != "" ];then
  4355.                     IPSEC_EAP_USERNAME_2=\"$value\"
  4356.                 fi
  4357.                 echo "IPSEC_EAP_USERNAME_2=$IPSEC_EAP_USERNAME_2" >> $OUT_FILE
  4358.                 ;;
  4359.             "IPSEC_EAP_PASSWORD")
  4360.                 if [ "$value" != "" ];then
  4361.                     IPSEC_EAP_PASSWORD=\"$value\"
  4362.                 fi
  4363.                 echo "IPSEC_EAP_PASSWORD=$IPSEC_EAP_PASSWORD" >> $OUT_FILE
  4364.                 ;;
  4365.             "IPSEC_EAP_PASSWORD_2")
  4366.                 if [ "$value" != "" ];then
  4367.                     IPSEC_EAP_PASSWORD_2=\"$value\"
  4368.                 fi
  4369.                 echo "IPSEC_EAP_PASSWORD_2=$IPSEC_EAP_PASSWORD_2" >> $OUT_FILE
  4370.                 ;;
  4371.             "IPSEC_AUTH_CA_FILE")
  4372.                 IPSEC_AUTH_CA_FILE=$value
  4373.                 echo "IPSEC_AUTH_CA_FILE=$value" >> $OUT_FILE
  4374.                 ;;
  4375.             "IPSEC_AUTH_CA_FILE_2")
  4376.                 IPSEC_AUTH_CA_FILE_2=$value
  4377.                 echo "IPSEC_AUTH_CA_FILE_2=$value" >> $OUT_FILE
  4378.                 ;;
  4379.             "IPSEC_AUTH_CA_MD5SUM")
  4380.                 IPSEC_AUTH_CA_MD5SUM=$value
  4381.                 echo "IPSEC_AUTH_CA_MD5SUM=$value" >> $OUT_FILE
  4382.                 ;;
  4383.             "IPSEC_AUTH_CA_MD5SUM_2")
  4384.                 IPSEC_AUTH_CA_MD5SUM_2=$value
  4385.                 echo "IPSEC_AUTH_CA_MD5SUM_2=$value" >> $OUT_FILE
  4386.                 ;;
  4387.             "IPSEC_RADIUS_CA_FILE")
  4388.                 IPSEC_RADIUS_CA_FILE=$value
  4389.                 echo "IPSEC_RADIUS_CA_FILE=$value" >> $OUT_FILE
  4390.                 ;;
  4391.             "IPSEC_RADIUS_CA_FILE_2")
  4392.                 IPSEC_RADIUS_CA_FILE_2=$value
  4393.                 echo "IPSEC_RADIUS_CA_FILE_2=$value" >> $OUT_FILE
  4394.                 ;;
  4395.             "IPSEC_RADIUS_CA_MD5SUM")
  4396.                 IPSEC_RADIUS_CA_MD5SUM=$value
  4397.                 echo "IPSEC_RADIUS_CA_MD5SUM=$value" >> $OUT_FILE
  4398.                 ;;
  4399.             "IPSEC_RADIUS_CA_MD5SUM_2")
  4400.                 IPSEC_RADIUS_CA_MD5SUM_2=$value
  4401.                 echo "IPSEC_RADIUS_CA_MD5SUM_2=$value" >> $OUT_FILE
  4402.                 ;;
  4403.             "IPSEC_RESTRICT_PHASE2")
  4404.                 IPSEC_RESTRICT_PHASE2=$value
  4405.                 ;;
  4406.             "IPSEC_RESTRICT_PHASE2_2")
  4407.                 IPSEC_RESTRICT_PHASE2_2=$value
  4408.                 ;;
  4409.             "IPSEC_RESTRICT_IKE")
  4410.                 IPSEC_RESTRICT_IKE=$value
  4411.                 ;;
  4412.             "IPSEC_RESTRICT_IKE_2")
  4413.                 IPSEC_RESTRICT_IKE_2=$value
  4414.                 ;;
  4415.             "IPSEC_IKE_CIPHER_START")
  4416.                 if [ "$value" = "1" ];then
  4417.                     IPSEC_IKE_ALGO=""
  4418.                     PRIMARY_IKE_CIPHER=1
  4419.                 elif [ "$value" = "2" ];then
  4420.                     SECONDARY_IKE_CIPHER=1
  4421.                     IPSEC_IKE_ALGO_2=""
  4422.                 fi
  4423.                 ;;
  4424.             "IPSEC_IKE_CIPHER_STOP")
  4425.                 if [ "$value" = "1" ];then
  4426.                     PRIMARY_IKE_CIPHER=""
  4427.                 elif [ "$value" = "2" ];then
  4428.                     SECONDARY_IKE_CIPHER=""
  4429.                 fi
  4430.                 ;;
  4431.             "IKE_CIPHER_ENTRY")
  4432.                 CIPHER=`echo $value | sed "s/ (.*)//g"`
  4433.                 CIPHER=`echo $CIPHER | sed "s/-//"`
  4434.                 3DES_PRESENT=`echo $CIPHER | grep "3des"`
  4435.                 if [ "$3DES_PRESENT" != "" ];then
  4436.                     CIPHER=`echo $CIPHER | sed "s/3des[0-9]*/3des/g"`
  4437.                 fi
  4438.                 3DES_PRESENT=""
  4439.                 CIPHER=`echo $CIPHER | sed "s/none-//g"`
  4440.                 CIPHER=`echo $CIPHER | sed "s/-none//g"`
  4441.                 CIPHER=`echo $CIPHER | sed "s/-noesn//g"`
  4442.                 CIPHER=`echo $CIPHER | sed "s/none//g"`
  4443.                 # Handling of 'any' clause
  4444.                 ANY_CASE=`echo $CIPHER | grep "any"`
  4445.                 if [ "$ANY_CASE" != "" ];then
  4446.                     LENGTH=`echo $CIPHER | cut -d "-" -f1 | sed 's/[^0-9]*//g' | xargs`
  4447.                     set_default_cipher $LENGTH
  4448.                 fi
  4449.                 if [ "$PRIMARY_IKE_CIPHER" = "1" ];then
  4450.                     if [ "$IPSEC_IKE_ALGO" != "" ];then
  4451.                         IPSEC_IKE_ALGO=$IPSEC_IKE_ALGO","
  4452.                     fi
  4453.                     IPSEC_IKE_ALGO=$IPSEC_IKE_ALGO"$CIPHER"
  4454.                 elif [ "$SECONDARY_IKE_CIPHER" = "1" ];then
  4455.                     if [ "$IPSEC_IKE_ALGO_2" != "" ];then
  4456.                                                 IPSEC_IKE_ALGO_2=$IPSEC_IKE_ALGO_2","
  4457.                                         fi
  4458.                                         IPSEC_IKE_ALGO_2=$IPSEC_IKE_ALGO_2"$CIPHER"
  4459.                 fi
  4460.                 ;;
  4461.             "IPSEC_PHASE2_CIPHER_START")
  4462.                 if [ "$value" = "1" ];then
  4463.                     IPSEC_PHASE2_ALGO=""
  4464.                     PRIMARY_PHASE2_CIPHER=1
  4465.                 elif [ "$value" = "2" ];then
  4466.                     IPSEC_PHASE2_ALGO_2=""
  4467.                     SECONDARY_PHASE2_CIPHER=1
  4468.                 fi
  4469.                 ;;
  4470.             "IPSEC_PHASE2_CIPHER_STOP")
  4471.                 if [ "$value" = "1" ];then
  4472.                     PRIMARY_PHASE2_CIPHER=""
  4473.                 elif [ "$value" = "2" ];then
  4474.                     SECONDARY_PHASE2_CIPHER=""
  4475.                 fi
  4476.                 ;;
  4477.             "PHASE2_CIPHER_ENTRY")
  4478.                 CIPHER=`echo $value | sed "s/ (.*)//g"`
  4479.                 CIPHER=`echo $CIPHER | sed "s/-//"`
  4480.                 3DES_PRESENT=`echo $CIPHER | grep "3des"`
  4481.                 if [ "$3DES_PRESENT" != "" ];then
  4482.                     CIPHER=`echo $CIPHER | sed "s/3des[0-9]*/3des/g"`
  4483.                 fi
  4484.                 3DES_PRESENT=""
  4485.                 CIPHER=`echo $CIPHER | sed "s/none-//g"`
  4486.                 CIPHER=`echo $CIPHER | sed "s/-none//g"`
  4487.                 CIPHER=`echo $CIPHER | sed "s/-noesn//g"`
  4488.                 CIPHER=`echo $CIPHER | sed "s/none//g"`
  4489.                 # Handling of 'any' clause
  4490.                 ANY_CASE=`echo $CIPHER | grep "any"`
  4491.                 if [ "$ANY_CASE" != "" ];then
  4492.                     LENGTH=`echo $CIPHER | cut -d "-" -f1 | sed 's/[^0-9]*//g' | xargs`
  4493.                     set_default_cipher $LENGTH
  4494.                 fi
  4495.                 if [ "$PRIMARY_PHASE2_CIPHER" = "1" ];then
  4496.                     if [ "$IPSEC_PHASE2_ALGO" != "" ];then
  4497.                         IPSEC_PHASE2_ALGO=$IPSEC_PHASE2_ALGO","
  4498.                     fi
  4499.                     IPSEC_PHASE2_ALGO=$IPSEC_PHASE2_ALGO"$CIPHER"
  4500.                 elif [ "$SECONDARY_PHASE2_CIPHER" = "1" ];then
  4501.                     if [ "$IPSEC_PHASE2_ALGO_2" != "" ];then
  4502.                         IPSEC_PHASE2_ALGO_2=$IPSEC_PHASE2_ALGO_2","
  4503.                     fi
  4504.                     IPSEC_PHASE2_ALGO_2=$IPSEC_PHASE2_ALGO_2"$CIPHER"
  4505.                 fi
  4506.                 ;;
  4507.             "IPSEC_AAA_IDENTITY")
  4508.                     IPSEC_AAA_IDENTITY="$value"
  4509.                 ;;
  4510.             "IPSEC_AAA_IDENTITY_2")
  4511.                     IPSEC_AAA_IDENTITY_2="$value"
  4512.                 ;;
  4513.             "IPSEC_IKE_LIFETIME")
  4514.                 if [ "$value" = "" ];then
  4515.                     value=3
  4516.                 fi
  4517.                 value=$value"h"
  4518.                 IPSEC_IKE_LIFETIME=$value
  4519.                 ;;
  4520.             "IPSEC_IKE_LIFETIME_2")
  4521.                 if [ "$value" = "" ];then
  4522.                     value=3
  4523.                 fi
  4524.                 value=$value"h"
  4525.                 IPSEC_IKE_LIFETIME_2=$value
  4526.                 ;;
  4527.             "IPSEC_PHASE2_LIFETIME")
  4528.                 IPSEC_PHASE2_LIFETIME=$value"h"
  4529.                 ;;
  4530.             "IPSEC_PHASE2_LIFETIME_2")
  4531.                 IPSEC_PHASE2_LIFETIME_2=$value"h"
  4532.                 ;;
  4533.             "NETWORK_PROFILE_ID")
  4534.                 NETWORK_PROFILE_ID=$value
  4535.                 ;;
  4536.             "IPSEC_DPD_ENABLED")
  4537.                 IPSEC_DPD_ENABLED=$value
  4538.                 ;;
  4539.             "IPSEC_DPD_ENABLED_2")
  4540.                 IPSEC_DPD_ENABLED_2=$value
  4541.                 ;;
  4542.             "IPSEC_EAP_METHOD")
  4543.                 if [ "$value" = "RADIUS (eap-radius)" ];then
  4544.                     IPSEC_EAP_METHOD="eap-radius"
  4545.                 elif [ "$value" = "MD5 (eap-md5)" ];then
  4546.                     IPSEC_EAP_METHOD="eap-md5"
  4547.                 elif [ "$value" = "MSCHAPv2" ];then
  4548.                     IPSEC_EAP_METHOD="eap-MSCHAPv2"
  4549.                 elif [ "$value" = "PEAP (eap-peap)" ];then
  4550.                     IPSEC_EAP_METHOD="eap-peap"
  4551.                 else
  4552.                     IPSEC_EAP_METHOD="eap"
  4553.                 fi
  4554.                 ;;
  4555.             "IPSEC_EAP_METHOD_2")
  4556.                 if [ "$value" = "RADIUS (eap-radius)" ];then
  4557.                                         IPSEC_EAP_METHOD_2="eap-radius"
  4558.                                 elif [ "$value" = "MD5 (eap-md5)" ];then
  4559.                                         IPSEC_EAP_METHOD_2="eap-md5"
  4560.                 elif [ "$value" = "MSCHAPv2" ];then
  4561.                                         IPSEC_EAP_METHOD_2="eap-MSCHAPv2"
  4562.                                 elif [ "$value" = "PEAP (eap-peap)" ];then
  4563.                                         IPSEC_EAP_METHOD_2="eap-peap";
  4564.                 else
  4565.                     IPSEC_EAP_METHOD_2="eap"
  4566.                 fi
  4567.                 ;;
  4568.             *)
  4569.                 echo "Unrecognized pair $param:$value in VAP section, using default config command"
  4570.                 ;;
  4571.         esac
  4572.  
  4573.     done < $1
  4574.  
  4575.     BRIDGE_NAME="br0"
  4576.     if [ "$primary_network_vlan" = "0" ]; then
  4577.         echo "ExternalInterface=$BRIDGE_NAME" >> $OUT_FILE
  4578.     else
  4579.         echo "ExternalInterface=$BRIDGE_NAME.$primary_network_vlan" >> $OUT_FILE
  4580.     fi
  4581.  
  4582.     echo "NetworkExternalInterface=tunbr$NETWORK_PROFILE_ID" >> $OUT_FILE
  4583.  
  4584.     if [ "$is_secondary_network_enabled" = "1" ]; then
  4585.         if [ "$sec_network_vlan" = "0" ]; then
  4586.             echo "SecExternalInterface=$BRIDGE_NAME" >> $OUT_FILE
  4587.         else
  4588.             echo "SecExternalInterface=$BRIDGE_NAME.$sec_network_vlan" >> $OUT_FILE
  4589.         fi
  4590.     fi
  4591.  
  4592.     case $NETWORK_TYPE in
  4593.         1)
  4594.             set_gretap_conf
  4595.             ;;
  4596.         2)
  4597.             set_gretap_conf
  4598.             IPSEC_DIR=$NETWORK_PROFILE_DIR/ipsec
  4599.             if [ ! -e $IPSEC_DIR ];then
  4600.                 mkdir $IPSEC_DIR >/dev/null 2>&1
  4601.             fi
  4602.             set_primary_ipsec_conf
  4603.             # SECONDARY_IPSEC_ENABLED value ?
  4604.             if [ "$is_secondary_network_enabled" = "1" ];then
  4605.                 set_gretap_conf
  4606.                 set_secondary_ipsec_conf
  4607.             fi
  4608.             ;;
  4609.         *)
  4610.             echo "unknown network type $NETWORK_TYPE"
  4611.             continue;
  4612.             ;;
  4613.     esac
  4614.     return 0
  4615. }
  4616.  
  4617. handle_network_del()
  4618. {
  4619.     echo "DEL network $CURRENT_SECTION_ID"
  4620.     /opt/ap/network_stop.sh $CURRENT_SECTION_ID delete >> /tmp/network${CURRENT_SECTION_ID}/network_stop_logs 2>&1
  4621.     cleanup_current_network_section
  4622. }
  4623.  
  4624. handle_network_mod_stop()
  4625. {
  4626.     echo "MOD STOP network $CURRENT_SECTION_ID"
  4627.     /opt/ap/network_stop.sh $CURRENT_SECTION_ID stop >> /tmp/network${CURRENT_SECTION_ID}/network_stop_logs 2>&1
  4628.     cleanup_current_network_section
  4629. }
  4630.  
  4631. handle_network_mod_start()
  4632. {
  4633.     process_network_section /tmp/.section_NETWORK
  4634.     if [ $? -eq 1 ]; then
  4635.         echo "MOD START NETWORK $CURRENT_SECTION_ID aborted"
  4636.         rm -rf /tmp/network${CURRENT_SECTION_ID} >/dev/null 2>&1
  4637.         return
  4638.     fi
  4639.     echo "MOD START VAP $CURRENT_SECTION_ID"
  4640.     check_and_start_network $CURRENT_SECTION_ID normal
  4641. }
  4642.  
  4643.  
  4644. handle_network_new()
  4645. {
  4646.     process_network_section /tmp/.section_NETWORK
  4647.     if [ $? -eq 1 ]; then
  4648.         echo "NEW START NETWORK $CURRENT_SECTION_ID aborted"
  4649.         rm -rf /tmp/network${CURRENT_SECTION_ID} >/dev/null 2>&1
  4650.         return
  4651.     fi
  4652.     echo "NEW START VAP $CURRENT_SECTION_ID"
  4653.     check_and_start_network $CURRENT_SECTION_ID create
  4654. }
  4655.  
  4656. handle_network_section()
  4657. {
  4658.     case $CURRENT_SECTION_CMD in
  4659.         "NEW")
  4660.             echo "calling handle_network_new"
  4661.             handle_network_new
  4662.             ;;
  4663.         "MOD_STOP")
  4664.             handle_network_mod_stop
  4665.             echo "calling handle_network_mod_stop"
  4666.             ;;
  4667.         "MOD_START")
  4668.             handle_network_mod_start
  4669.             echo "calling handle_network_mod_start"
  4670.             ;;
  4671.         "F_MOD")
  4672.             echo "fmod for network is not supported"
  4673.             ;;
  4674.         "DEL")
  4675.             handle_network_del
  4676.             echo "calling handle_network_del"
  4677.             ;;
  4678.         "START")
  4679.             echo "start for network is not supported."
  4680.             ;;
  4681.         "STOP")
  4682.             echo "stop for network is not supported."
  4683.             ;;
  4684.         *)
  4685.             echo "calling handle_network_new"
  4686.             handle_network_new
  4687.             ;;
  4688.     esac
  4689. }
  4690.  
  4691.  
  4692. handle_eth_new()
  4693. {
  4694.     local conf_present
  4695.     if [ ! -f /tmp/.section_$CURRENT_SECTION ]; then
  4696.         return;
  4697.     fi
  4698.  
  4699.     echo "NEW START ETHSECTION $CURRENT_SECTION_ID"
  4700.     touch /tmp/wired_extension.conf
  4701.     conf_present=0
  4702.  
  4703.     while read -r line
  4704.     do
  4705.         param=`echo -E "$line" | cut -f1 -d"=" | xargs`
  4706.         value=`echo -E "$line" | cut -f2- -d"=" | xargs`
  4707.         if [ ! -z "$param" -a ! -z "$value" ]; then
  4708.             if [ "$value" != "-1" ]; then
  4709.                 echo "$param=$value" >> /tmp/wired_extension.conf
  4710.                 conf_present=1
  4711.             fi
  4712.         fi
  4713.     done < /tmp/.section_$CURRENT_SECTION
  4714.  
  4715.     if [ $conf_present -ne 1 ]; then
  4716.         #Remove file if no configuration is present.
  4717.         #Since, other code assumes presence of this file for configuration.
  4718.         echo "No conf present for secondary ethernet ports VLAN tagging."
  4719.         rm -f /tmp/wired_extension.conf
  4720.     fi
  4721. }
  4722.  
  4723. handle_eth_section()
  4724. {
  4725.     if [ "$SECONDARY_ETH_EXTENSION" != "TRUE" ]; then
  4726.         echo "Wired extension not supported for this platform"
  4727.         return;
  4728.     fi
  4729.  
  4730.     case $CURRENT_SECTION_CMD in
  4731.         "NEW")
  4732.             echo "calling handle_eth_new"
  4733.             handle_eth_new
  4734.             ;;
  4735.         *)
  4736.             echo "non matching section command [$CURRENT_SECTION_CMD]. Calling handle_eth_new by default"
  4737.             handle_eth_new
  4738.             ;;
  4739.     esac
  4740. }
  4741.  
  4742. ## main: Script starts here.
  4743. PARSER_VARS_FILE=/tmp/parser_vars
  4744. ETH_MAC=`cat /tmp/eth_macs | grep eth0 | awk -F " " '{print $2}' | xargs`
  4745. RFC_ETH_MAC=`echo $ETH_MAC | sed "s/:/-/g"`
  4746. AP_REBOOT_COUNT=`grep "^reboot_count" /opt/sensor/pmac_status.dat | awk -F "=" '{print $2}'`
  4747. AP_MAC_WITHOUT_COLON=`echo $ETH_MAC | sed 's/://g'`
  4748. NAT_COUNT=0
  4749. NOCAT_PORT=5280
  4750.  
  4751. CURRENT_SECTION=$1
  4752. CURRENT_SECTION_ID=$2
  4753. CURRENT_SECTION_CMD=$3
  4754.  
  4755. comm_vlan=`grep communication_vlan /opt/sensor/discovery.conf | cut -d "=" -f2 | xargs`
  4756. if [ $comm_vlan -eq 0 ] ; then
  4757.     comm_vlan="br0"
  4758. else
  4759.     comm_vlan="br0."$comm_vlan
  4760. fi
  4761.  
  4762. echo ""
  4763. echo "`date`"
  4764. echo "ap-config-parser.sh is called with arguments CURRENT_SECTION=$CURRENT_SECTION, CURRENT_SECTION_ID=$CURRENT_SECTION_ID, CURRENT_SECTION_CMD=$CURRENT_SECTION_CMD"
  4765.  
  4766. if [ "$BUILD_V2" = "TRUE" ]; then
  4767.   if [ "$DUAL_RADIO" = "1" ]; then
  4768.     NUM_RADIOS=2
  4769.   else
  4770.     NUM_RADIOS=1
  4771.   fi
  4772. else
  4773. #BUILD_V1
  4774.   NUM_RADIOS=2
  4775.   if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  4776.     NUM_RADIOS=1
  4777.   fi
  4778. #BUILD_V2
  4779. fi
  4780.  
  4781. case $CURRENT_SECTION in
  4782.     "RADIO")
  4783.         handle_radio_section
  4784.         ;;
  4785.     "VAP")
  4786.         handle_vap_section
  4787.         ;;
  4788.     "NETWORK")
  4789.         echo "handle_network_section CURRENT_SECTION_CMD $CURRENT_SECTION_CMD "
  4790.         handle_network_section
  4791.         ;;
  4792.     "ETHSECTION")
  4793.         echo "handle_eth_section CURRENT_SECTION_CMD $CURRENT_SECTION_CMD "
  4794.         handle_eth_section
  4795.         ;;
  4796.  
  4797. esac
  4798.  
  4799. ==> ./bridge_mgmt.sh <==
  4800. #!/bin/sh
  4801.  
  4802. init_vars()
  4803. {
  4804.     if [ -f /opt/sensor/fake_mac_function ]; then
  4805.         . /opt/sensor/fake_mac_function
  4806.     fi
  4807.     DISC_CONF_FILE="/opt/sensor/discovery.conf"
  4808.     COMMUNICATION_VLAN=`grep communication_vlan $DISC_CONF_FILE | cut -d "=" -f2 | xargs`
  4809. }
  4810.  
  4811. is_service_vlan()
  4812. {
  4813.     vlid=$1
  4814.  
  4815.     if [ ! -z "$service_iface_vlans" ];then
  4816.         for vl in $service_iface_vlans
  4817.         do
  4818.             [ "$vl" = "$vlid" ] && return 1
  4819.         done   
  4820.     fi
  4821.     return 0
  4822. }
  4823.  
  4824. ## $1 - VLAN_ID of bridge interface
  4825. check_and_change_bonjour_service_interface_to_bridge()
  4826. {
  4827.     for iter_profile_dir in /tmp/profile*
  4828.     do
  4829.         iter_bonjour_conf="$iter_profile_dir/bonjour_gateway.conf"
  4830.         if [ ! -e "$iter_bonjour_conf" ]; then
  4831.                 continue;
  4832.         fi
  4833.                    
  4834.         iter_profile_id=`grep "^SSID_PROFILE_ID=" $iter_profile_dir/profile.conf | awk -F "=" '{print $2}' | xargs`
  4835.         SERVICE_IFACE_LIST=`grep "^service_interface_list=" $iter_bonjour_conf | awk -F "=" '{print $2}' | xargs`
  4836.         SERVICE_IFACE_LIST=`echo $SERVICE_IFACE_LIST | sed 's/,/\ /g' | xargs`
  4837.         NEW_SERVICE_IFACE_LIST=""
  4838.         service_iface_list_changed=0
  4839.         for service_iface in $SERVICE_IFACE_LIST
  4840.         do
  4841.             interfaceName=`echo $service_iface | awk -F "." '{print $1}' | xargs`
  4842.             vlan=`echo $service_iface | awk -F "." '{print $2}' | xargs`
  4843.             if [ "$interfaceName" = "$ETH_INTERFACE" -a "$vlan" = "$1" ]; then
  4844.                 if [ "$NEW_SERVICE_IFACE_LIST" = "" ]; then
  4845.                         NEW_SERVICE_IFACE_LIST=br0.$vlan
  4846.                 else
  4847.                         NEW_SERVICE_IFACE_LIST=`echo $NEW_SERVICE_IFACE_LIST,br0.$vlan`
  4848.                 fi
  4849.                 service_iface_list_changed=1
  4850.             else
  4851.                 if [ "$NEW_SERVICE_IFACE_LIST" = "" ]; then
  4852.                         NEW_SERVICE_IFACE_LIST=$service_iface
  4853.                 else
  4854.                         NEW_SERVICE_IFACE_LIST=`echo $NEW_SERVICE_IFACE_LIST,$service_iface`
  4855.                 fi
  4856.             fi
  4857.         done
  4858.                    
  4859.         if [ "$service_iface_list_changed" = "1" ]; then
  4860.             sed -i "/service_interface_list/c\service_interface_list=${NEW_SERVICE_IFACE_LIST}" $iter_profile_dir/bonjour_gateway.conf
  4861.             echo -e "\n[bridge_mgmt.sh]: Calling reload_cli /tmp/bonjour_gateway_socket MOD ${iter_profile_id}" >> /tmp/bonjour_gateway_log
  4862.             reload_cli /tmp/bonjour_gateway_socket MOD ${iter_profile_id}
  4863.         fi
  4864.     done
  4865. }
  4866.  
  4867. check_and_add_bridge_iface()
  4868. {
  4869.     VBRNAME=$1
  4870.     NETWORK_VLAN=$2
  4871.     IFACE_TO_ADD=$3
  4872.  
  4873.     echo "Check and add bridge $VBRNAME, vlan id is $NETWORK_VLAN, iface is $IFACE_TO_ADD"
  4874.     ## check local network vlan bridge exist br0.<VLAN_ID>
  4875.     ## we have to check for only bridges starting with ^br
  4876.  
  4877.     BRIDGE_NAME="br0"
  4878.     bridge_exist=0
  4879.     bridges=`brctl show | grep -v 'bridge name' | grep ^br  | awk '{print $1}' | xargs`
  4880.     for i in $bridges
  4881.     do
  4882.         if [ "$i" = "$VBRNAME" ]; then
  4883.             echo "Bridge $VBRNAME found"
  4884.             bridge_exist=1
  4885.             break;
  4886.         fi
  4887.     done
  4888.  
  4889.     echo "bridge $VBRNAME exist $bridge_exist"
  4890.  
  4891.     #XXX : Not needed now. May be we will need while doing VLAN monitoring. Also, need to check at that time, how to call this script before config_apsec_vlan_monitoring.sh script. Since handling of /tmp/handle_bridge_routing is done from config_apsec_vlan_monitoring.sh.
  4892.     #if [ "$bridge_exist" = "1" -a "$VBRNAME" = "br0" ]; then
  4893.     #   br0_exist=`grep "^br0$" /tmp/handle_bridge_routing`
  4894.     #   if [ "$br0_exist" = "" ]; then
  4895.     #       echo "adding $VBRNAME in /tmp/handle_bridge_routing, special handling for br0"
  4896.     #       echo "$VBRNAME" >> /tmp/handle_bridge_routing
  4897.     #   fi
  4898.     #fi
  4899.  
  4900.     if [ -e "/tmp/mesh_enabled" ]; then
  4901.         ETH_INTERFACE="vle0"
  4902.     else
  4903.         ETH_INTERFACE="eth0"
  4904.     fi
  4905.  
  4906.     if [ "$bridge_exist" = "0" ]; then
  4907.  
  4908.         brctl addbr $VBRNAME
  4909.  
  4910.         echo "bridge $VBRNAME doesn't exist."
  4911.         echo 1 > /proc/sys/net/ipv4/conf/$VBRNAME/arp_ignore
  4912.         #echo "$VBRNAME" >> /tmp/handle_bridge_routing
  4913.         #echo "adding $VBRNAME in /tmp/handle_bridge_routing. because it is new bridge."
  4914.  
  4915.         if [ "$NETWORK_VLAN" = "0" ]; then
  4916.             brctl addif $VBRNAME $ETH_INTERFACE
  4917.             ifconfig $ETH_INTERFACE up
  4918.             ifconfig $VBRNAME up
  4919.             echo "$ETH_INTERFACE added in $VBRNAME"
  4920.         else
  4921.             is_service_vlan $NETWORK_VLAN
  4922.             if [ $? -ne 1 ];then
  4923.                 vconfig add $ETH_INTERFACE $NETWORK_VLAN
  4924.                 brctl addif $VBRNAME $ETH_INTERFACE.$NETWORK_VLAN
  4925.  
  4926.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 0 0
  4927.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 1 1
  4928.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 2 2
  4929.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 3 3
  4930.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 4 4
  4931.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 5 5
  4932.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 6 6
  4933.                 vconfig set_egress_map $ETH_INTERFACE.$NETWORK_VLAN 7 7
  4934.                 vconfig set_ingress_map $ETH_INTERFACE.$NETWORK_VLAN 0 0
  4935.                 vconfig set_ingress_map $ETH_INTERFACE.$NETWORK_VLAN 1 1
  4936.                 vconfig set_ingress_map $ETH_INTERFACE.$NETWORK_VLAN 2 2
  4937.                 vconfig set_ingress_map $ETH_INTERFACE.$NETWORK_VLAN 3 3
  4938.                 vconfig set_ingress_map $ETH_INTERFACE.$NETWORK_VLAN 6 6
  4939.                 vconfig set_ingress_map $ETH_INTERFACE.$NETWORK_VLAN 7 7
  4940.  
  4941.                 echo "$ETH_INTERFACE.$NETWORK_VLAN added in $VBRNAME"
  4942.                 if [ "$COMMUNICATION_VLAN" != "$NETWORK_VLAN" ]; then
  4943.                         iface_mac=`cat /tmp/eth_macs | grep "^eth0" | awk '{print $2}' 2>/dev/null`
  4944.                     iface_fake_mac=`fakemac $iface_mac $NETWORK_VLAN 2>/dev/null`
  4945.                     /sbin/ifconfig $ETH_INTERFACE.$NETWORK_VLAN hw ether $iface_fake_mac > /dev/null 2>&1
  4946.                     echo "fakemac $iface_fake_mac assigned on $ETH_INTERFACE.$NETWORK_VLAN"
  4947.                 fi
  4948.  
  4949.                 ifconfig $ETH_INTERFACE.$NETWORK_VLAN up
  4950.                 ifconfig $VBRNAME up
  4951.             else
  4952.                     brctl addif $VBRNAME $ETH_INTERFACE.$NETWORK_VLAN
  4953.                 echo "$ETH_INTERFACE.$NETWORK_VLAN added in $VBRNAME"
  4954.                 ifconfig $VBRNAME up
  4955.                 check_and_change_bonjour_service_interface_to_bridge $NETWORK_VLAN
  4956.             fi
  4957.         fi
  4958.     fi
  4959.  
  4960.     brctl addif $VBRNAME $IFACE_TO_ADD
  4961. }
  4962.  
  4963. ########################## start ######################
  4964.  
  4965. echo "In $0 start : params : [$1][$2][$3][$4]"
  4966. SERVICE_IFACE_VLAN_FILE='/tmp/service_vlans'
  4967. if [ -e $SERVICE_IFACE_VLAN_FILE ];then
  4968.     service_iface_vlans=`cat $SERVICE_IFACE_VLAN_FILE`
  4969. fi 
  4970.  
  4971. init_vars
  4972.  
  4973. operation=$1
  4974. case $operation in
  4975.     ADD)
  4976.         check_and_add_bridge_iface $2 $3 $4
  4977.         ;;
  4978.     *)
  4979.         echo "Invalid operation agrument for $0"
  4980.         ;;
  4981. esac
  4982.  
  4983. ==> ./gpio.sh <==
  4984. #!/bin/sh
  4985.  
  4986. PIN=$1
  4987. DIR=$2
  4988. VAL=$3
  4989.  
  4990. #echo $1 $2 $3
  4991.  
  4992. GPIODIR=/sys/class/gpio
  4993.  
  4994. if [ ! -e $GPIODIR/gpio$PIN ]
  4995. then
  4996.     echo $PIN > $GPIODIR/export
  4997. fi
  4998.  
  4999. if [ -e $2 ]
  5000. then
  5001.     echo "Old vlaue:"
  5002.     cat $GPIODIR/gpio$PIN/value
  5003.     cat $GPIODIR/gpio$PIN/direction
  5004. else
  5005.     echo $DIR > $GPIODIR/gpio$PIN/direction
  5006.     echo "Old vlaue:"
  5007.     cat $GPIODIR/gpio$PIN/value
  5008.     echo "New value:"
  5009.     echo $VAL > $GPIODIR/gpio$PIN/value
  5010.     cat $GPIODIR/gpio$PIN/value
  5011. fi
  5012.  
  5013. ==> ./gpio_dump.sh <==
  5014. #!/bin/sh
  5015. GPIOCHIP=0
  5016. BASE=$(cat /sys/class/gpio/gpiochip${GPIOCHIP}/base)
  5017. NGPIO=$(cat /sys/class/gpio/gpiochip${GPIOCHIP}/ngpio)
  5018. max=$(($BASE+$NGPIO))
  5019. gpio=$BASE
  5020. while [ $gpio -lt $max ] ; do
  5021.     echo $gpio > /sys/class/gpio/export
  5022.     [ -d /sys/class/gpio/gpio${gpio} ] && {
  5023.         echo in > /sys/class/gpio/gpio${gpio}/direction
  5024.         echo "[GPIO${gpio}] value $(cat /sys/class/gpio/gpio${gpio}/value)"
  5025.         echo ${gpio} > /sys/class/gpio/unexport
  5026.     }
  5027.     gpio=$((gpio+1))
  5028. done
  5029.  
  5030.  
  5031. ==> ./is_portal_ssid.sh <==
  5032. #!/bin/sh
  5033. LST_FILE=/tmp/.portal_ssid.lst
  5034. LST_FILE_CURR=/tmp/.portal_ssid_curr.lst
  5035. LST_FILE_SPLASHD=/tmp/.portal_splashd.lst
  5036. SSID_NO_PORTAL=0
  5037. SSID_PORTAL_NO_SPLASHD=1
  5038. SSID_PORTAL_SPLASHD=2
  5039. ret=$SSID_NO_PORTAL
  5040. echo "" > $LST_FILE
  5041. echo "" > $LST_FILE_CURR
  5042. find /tmp/ -name portal.conf > $LST_FILE
  5043. grep "\/tmp\/profile" $LST_FILE > $LST_FILE_CURR
  5044.   while read -r line
  5045. do
  5046.   path1=`echo -E "$line" | cut -f2 -d"/"`
  5047.   path2=`echo -E "$line" | cut -f3 -d"/"`
  5048.   path=/$path1/$path2/profile.conf
  5049.   ssid=`grep AP_SSID "$path" | cut -f2 -d"="`
  5050.   ssid=`echo -E "$ssid" | cut -f2 -d"'"`
  5051.   if [ "$ssid" = "$1" ]; then
  5052.     ret=$SSID_PORTAL_NO_SPLASHD
  5053.     ps | grep splashd > $LST_FILE_SPLASHD
  5054.     while read -r line
  5055.     do
  5056.       splashd=`echo -E "$line" | grep "$path2"`
  5057.       if [ "$splashd" != "" ]; then
  5058.         ret=$SSID_PORTAL_SPLASHD
  5059.         break  
  5060.       fi    
  5061.     done < $LST_FILE_SPLASHD
  5062.     rm $LST_FILE_SPLASHD
  5063.     break
  5064.   fi
  5065. done < $LST_FILE_CURR
  5066.  
  5067. if [ $ret -eq $SSID_NO_PORTAL ]; then
  5068.   echo $1 has no portal configured
  5069. elif [ $ret -eq $SSID_PORTAL_NO_SPLASHD ]; then
  5070.   echo $1 has portal configured but splashd is not running
  5071. elif [ $ret -eq $SSID_PORTAL_SPLASHD ]; then
  5072.   echo $1 has portal configured and splashd is running
  5073. fi
  5074.  
  5075. rm $LST_FILE
  5076. rm $LST_FILE_CURR
  5077. exit ${ret}
  5078.  
  5079.  
  5080. ==> ./radius_acct_wrapper.sh <==
  5081. #!/bin/sh
  5082. PROFILE_ID=$3
  5083. CALLING_STATION_ID=$1
  5084. OPERATION=$2
  5085. DUMMY_IP="0.0.0.0"
  5086. TIME=`date +%s`
  5087. PROFILE_DIR="/tmp/profile$PROFILE_ID"
  5088. PROFILE_CONF="$PROFILE_DIR/profile.conf"
  5089. DOT1X_PROFILE=`grep "AP_SECFILE" "$PROFILE_CONF" | cut -f2 -d '='`
  5090. AP_SECMODE=`grep "AP_SECMODE" "$PROFILE_CONF" | cut -f2 -d '='`
  5091. NOCAT_CONF="/tmp/profile$PROFILE_ID/nocat.conf"
  5092. if [ "$DOT1X_PROFILE" != "" -a "$DOT1X_PROFILE" != "PSK" ];then
  5093.     exit 0 
  5094. fi
  5095. if [ "$AP_SECMODE" = "None" -o "$AP_SECMODE" = "WPA" ];then
  5096.     is_portal_radius=`grep "OperatingMode" "$NOCAT_CONF" | sed "s/OperatingMode//" | xargs` >/dev/null 2>&1
  5097.     if [ "$is_portal_radius" = "3" ];then
  5098.         exit 0
  5099.     fi
  5100.     if [ "$OPERATION" = "start" ];then
  5101.         echo "start $CALLING_STATION_ID $CALLING_STATION_ID $DUMMY_IP $TIME $TIME" | /opt/ap/radius/radius_client acct -u$CALLING_STATION_ID -c /tmp/profile${PROFILE_ID} &
  5102.     elif [ "$OPERATION" = "stop" ];then
  5103.         ps -ef | grep "radius_client acct" | grep "$CALLING_STATION_ID" | grep -v grep | awk ' { print $1 } '|xargs kill -9
  5104.     fi
  5105. fi
  5106.  
  5107. ==> ./run_speedtest.sh <==
  5108. #!/bin/sh
  5109.  
  5110. config_file=$1
  5111. log_file=$2
  5112. def_str="defaults"
  5113. vlan_ids=`cat $config_file | cut -d " " -f 1`
  5114. vlan_id_list=`echo ${vlan_ids} | sed 's/,/ /g'`
  5115. if [ "$def_str" = "$3" ]; then
  5116.   numth="20"
  5117.   ul1="/tmp/ul1.dat"
  5118.   ul2="/tmp/ul2.dat"
  5119.   sid="0"
  5120.  
  5121.   dd if=/dev/urandom of=$ul1 bs=1024 count=512 2>/dev/null
  5122.   dd if=/dev/urandom of=$ul2 bs=1024 count=256 2>/dev/null
  5123.   for v in $vlan_id_list; do
  5124.     /sbin/speedtest -vlan $v -th $numth -ul1 $ul1 -ul2 $ul2 -log $log_file -sid $sid
  5125.   done
  5126.   rm $ul1
  5127.   rm $ul2
  5128.  
  5129.   curr_count=`cat $config_file | cut -d " " -f 2`
  5130.   curr_count=`expr $curr_count + 1`
  5131.   max_count=`cat $config_file | cut -d " " -f 3`
  5132.   if [ $curr_count -ge $max_count ]; then
  5133.     status=`ps | grep "crond" | grep -v grep | wc -l`
  5134.     if [ $status -ge 1 ]; then
  5135.       killall crond > /dev/null
  5136.     fi
  5137.     rm $config_file > /dev/null
  5138.   else
  5139.     echo $vlan_ids $curr_count $max_count > $config_file
  5140.   fi
  5141. fi
  5142.  
  5143. ==> ./tc_wrapper.sh <==
  5144. #!/bin/sh
  5145.  
  5146. . /opt/sensor/env
  5147.  
  5148. do_exit()
  5149. {
  5150.     if [ "$tcwr_on" = "bss" ]; then
  5151.         touch /tmp/.tcwr_done
  5152.     fi
  5153.     exit ${1}
  5154. }
  5155.  
  5156. get_free_ifb_number()
  5157. {
  5158.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5159.         return 0
  5160.     fi
  5161.  
  5162.     number=0
  5163.     while [ $number -le 15 ]
  5164.     do
  5165.         cat /tmp/used_ifb_numbers | grep "^${number}:" 2>/dev/null
  5166.         if [ $? -eq 1 ]; then
  5167.             return $number;
  5168.         fi
  5169.         number=$(($number + 1))
  5170.     done
  5171. }
  5172.  
  5173. get_ifaces() {
  5174.     local cnt
  5175.     local cnt1
  5176.     local IF_DL
  5177.     local IF_UL
  5178.     local VAP_LIST
  5179.     local DYNAMIC_VAP_LIST
  5180.  
  5181.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5182.         return 0
  5183.     fi
  5184.  
  5185.   tcwr_ssid=`cat /tmp/profile${tcwr_profile}/profile.conf | grep AP_SSID | cut -d "=" -f2 | xargs`
  5186.   tcwr_ssid=`echo $tcwr_ssid | cut -d "'" -f2 | xargs`
  5187.  
  5188.     VAP_LIST=`cat /tmp/profile${tcwr_profile}/profile.conf | grep ^VAP_LIST | cut -d "=" -f2 | xargs`
  5189.     DYNAMIC_VAP_LIST=`cat /tmp/profile${tcwr_profile}/profile.conf | grep ^DYNAMIC_VAP_LIST | cut -d "=" -f2 | xargs`
  5190.  
  5191.     cnt=1
  5192.     IF_DL=$(echo $VAP_LIST | cut -d "," -f1 | cut -d "." -f1)
  5193.     IF_UL=$(echo $VAP_LIST | cut -d "," -f1)
  5194.     tmp=$(echo $VAP_LIST | grep ",")
  5195.  
  5196.     echo IF_DL=$IF_DL
  5197.     echo IF_UL=$IF_UL
  5198.  
  5199.     if [ "$tmp" = "" ]; then
  5200.         param=`echo vap_dl${cnt}`
  5201.         echo "$param=$IF_DL"
  5202.         export $param=$IF_DL
  5203.  
  5204.         param=`echo vap_ul${cnt}`
  5205.         echo "$param=$IF_UL"
  5206.         export $param=$IF_UL
  5207.  
  5208.         cnt=`expr $cnt + 1 `
  5209.     else
  5210.         while [ "$IF_DL" != "" ]; do
  5211.             param=`echo vap_dl${cnt}`
  5212.             echo "$param=$IF_DL"
  5213.             export $param=$IF_DL
  5214.  
  5215.             param=`echo vap_ul${cnt}`
  5216.             echo "$param=$IF_UL"
  5217.             export $param=$IF_UL
  5218.  
  5219.             cnt=`expr $cnt + 1 `
  5220.  
  5221.             IF_DL=$(echo $VAP_LIST | cut -d "," -f${cnt} | cut -d "." -f1)
  5222.             IF_UL=$(echo $VAP_LIST | cut -d "," -f${cnt})
  5223.         done
  5224.     fi
  5225.  
  5226.     cnt1=1
  5227.     IF_UL=$(echo $DYNAMIC_VAP_LIST | cut -d "," -f1)
  5228.     tmp=$(echo $DYNAMIC_VAP_LIST | grep ",")
  5229.     if [ "$tmp" = "" ]; then
  5230.         param=`echo vap_ul${cnt}`
  5231.         echo "$param=$IF_UL"
  5232.         export $param=$IF_UL
  5233.         cnt=`expr $cnt + 1 `
  5234.     else
  5235.         while [ "$IF_UL" != "" ]; do
  5236.             param=`echo vap_ul${cnt}`
  5237.             echo "$param=$IF_UL"
  5238.             export $param=$IF_UL
  5239.            
  5240.             cnt=`expr $cnt + 1 `
  5241.             cnt1=`expr $cnt1 + 1 `
  5242.             IF_UL=$(echo $DYNAMIC_VAP_LIST | cut -d "," -f${cnt1})
  5243.         done
  5244.     fi
  5245.     return 0
  5246. }
  5247.  
  5248. lookup_ifb() {
  5249.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5250.         return 0
  5251.     fi
  5252.  
  5253.     CUR_INDEX=`cat /tmp/used_ifb_numbers | grep ":${tcwr_profile}$" | cut -d ":" -f1`
  5254.     if [ "$CUR_INDEX" != "" ]; then
  5255.         IFB_UP=ifb$(expr $(expr 2 \* $CUR_INDEX) + 1)
  5256.         IFB_DOWN=ifb$(expr 2 \* $CUR_INDEX)
  5257.  
  5258.         # Redirections for this profile have already been set
  5259.         return 0
  5260.     fi
  5261.  
  5262.     return 0
  5263. }
  5264.  
  5265. clear_ifb_redir() {
  5266.     local cnt
  5267.     local vap
  5268.  
  5269.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5270.         return 0
  5271.     fi
  5272.  
  5273.     cat /tmp/used_ifb_numbers | grep -v ":${tcwr_profile}$" > /tmp/.used_ifb_profile
  5274.     mv /tmp/.used_ifb_profile /tmp/used_ifb_numbers
  5275.  
  5276.     IFB_UP=ifb$(expr $(expr 2 \* $CUR_INDEX) + 1)
  5277.     IFB_DOWN=ifb$(expr 2 \* $CUR_INDEX)
  5278.  
  5279.     echo "UPLOAD"
  5280.  
  5281.     cnt=1
  5282.     vap=$(eval echo \$vap_ul${cnt})
  5283.  
  5284.     while [ "$vap" != "" ]; do
  5285.         tc filter del dev ${vap} parent ffff: handle 800::1 protocol ip prio 10 \
  5286.             u32 match u32 0 0 flowid 1:1 \
  5287.             action mirred egress redirect dev ${IFB_UP}
  5288.         if [ "$IPV6_SUPPORT" = "1" ]; then
  5289.             tc filter del dev ${vap} parent ffff: handle 801::1 protocol ipv6 prio 11 \
  5290.                 u32 match u32 0 0 flowid 1:1 \
  5291.                 action mirred egress redirect dev ${IFB_UP}
  5292.         fi
  5293.  
  5294.         tc qdisc del dev ${vap} ingress
  5295.  
  5296.         echo "${vap} ----UPLOAD----> ${IFB_UP} -> BROKEN"
  5297.         cnt=`expr $cnt + 1`
  5298.         vap=$(eval echo \$vap_ul${cnt})
  5299.     done
  5300.  
  5301.     echo "DOWNLOAD"
  5302.  
  5303.     cnt=1
  5304.     vap=$(eval echo \$vap_dl${cnt})
  5305.  
  5306.     while [ "$vap" != "" ]; do
  5307.         tc filter del dev ${vap} parent 1: handle 800::2 protocol ip prio 10 \
  5308.             u32 match u32 0 0 flowid 1:1 \
  5309.             action mirred egress redirect dev ${IFB_DOWN}
  5310.            
  5311.         if [ "$IPV6_SUPPORT" = "1" ]; then
  5312.             tc filter del dev ${vap} parent 1: handle 801::2 protocol ipv6 prio 11 \
  5313.                 u32 match u32 0 0 flowid 1:1 \
  5314.                 action mirred egress redirect dev ${IFB_DOWN}
  5315.         fi
  5316.  
  5317.         tc qdisc del dev ${vap} root handle 1: htb
  5318.         echo "${vap} ---DOWNLOAD---> ${IFB_DOWN} -> BROKEN"
  5319.  
  5320.         cnt=`expr $cnt + 1`
  5321.         vap=$(eval echo \$vap_dl${cnt})
  5322.     done
  5323.  
  5324.  
  5325.     tc qdisc del dev ${IFB_DOWN} root handle 2:
  5326.     tc qdisc del dev ${IFB_DOWN} root handle 1:
  5327.  
  5328.     tc qdisc del dev ${IFB_UP} root handle 2:
  5329.     tc qdisc del dev ${IFB_UP} root handle 1:
  5330.  
  5331.     ifconfig ${IFB_UP} down
  5332.     ifconfig ${IFB_DOWN} down
  5333.  
  5334.     return 0
  5335. }
  5336.  
  5337. set_ifb_redir() {
  5338.     local cnt
  5339.     local CUR_INDEX
  5340.     local vap
  5341.  
  5342.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5343.         return 0
  5344.     fi
  5345.  
  5346.     if [ "${IFB_UP}${IFB_DOWN}" != "" ]; then
  5347.         return 0
  5348.     fi
  5349.  
  5350.     get_free_ifb_number
  5351.     CUR_INDEX=$?
  5352.  
  5353.     echo "${CUR_INDEX}:${tcwr_profile}" >> /tmp/used_ifb_numbers
  5354.  
  5355.     IFB_UP=ifb$(expr $(expr 2 \* $CUR_INDEX) + 1)
  5356.     IFB_DOWN=ifb$(expr 2 \* $CUR_INDEX)
  5357.  
  5358.     echo "UPLOAD"
  5359.  
  5360.     ifconfig ${IFB_UP} up
  5361.     ifconfig ${IFB_DOWN} up
  5362.  
  5363.     cnt=1
  5364.     vap=$(eval echo \$vap_ul${cnt})
  5365.  
  5366.     echo "cnt=$cnt vap=$vap"
  5367.     while [ "$vap" != "" ]; do
  5368.         echo "IN cnt=$cnt vap=$vap"
  5369.         tc qdisc add dev ${vap} ingress
  5370.         if [ "$?" != "0" ]; then
  5371.             do_exit 7
  5372.         fi
  5373.         tc filter add dev ${vap} parent ffff: handle ::1 protocol ip prio 10 \
  5374.             u32 match u32 0 0 flowid 1:1 \
  5375.             action mirred egress redirect dev ${IFB_UP}
  5376.         if [ "$?" != "0" ]; then
  5377.             do_exit 8
  5378.         fi
  5379.        
  5380.         if [ "$IPV6_SUPPORT" = "1" ]; then
  5381.             tc filter add dev ${vap} parent ffff: handle ::1 protocol ipv6 prio 11 \
  5382.                 u32 match u32 0 0 flowid 1:1 \
  5383.                 action mirred egress redirect dev ${IFB_UP}
  5384.             if [ "$?" != "0" ]; then
  5385.                 do_exit 9
  5386.             fi
  5387.         fi
  5388.  
  5389.         echo "tc filter add dev ${vap} parent ffff: handle ::1 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ${IFB_UP}"
  5390.         echo "${vap} ----UPLOAD----> ${IFB_UP}"
  5391.         cnt=`expr $cnt + 1`
  5392.         vap=$(eval echo \$vap_ul${cnt})
  5393.     done
  5394.  
  5395.     echo "DOWNLOAD"
  5396.  
  5397.     cnt=1
  5398.     vap=$(eval echo \$vap_dl${cnt})
  5399.  
  5400.     echo "cnt=$cnt vap=$vap"
  5401.     while [ "$vap" != "" ]; do
  5402.         echo "IN cnt=$cnt vap=$vap"
  5403.         tc qdisc add dev ${vap} root handle 1: htb
  5404.         if [ "$?" != "0" ]; then
  5405.             do_exit 10
  5406.         fi
  5407.         tc filter add dev ${vap} parent 1: handle ::2 protocol ip prio 10 \
  5408.             u32 match u32 0 0 flowid 1:1 \
  5409.             action mirred egress redirect dev ${IFB_DOWN}
  5410.         if [ "$?" != "0" ]; then
  5411.             do_exit 11
  5412.         fi
  5413.        
  5414.         if [ "$IPV6_SUPPORT" = "1" ]; then
  5415.             tc filter add dev ${vap} parent 1: handle ::2 protocol ipv6 prio 11 \
  5416.                 u32 match u32 0 0 flowid 1:1 \
  5417.                 action mirred egress redirect dev ${IFB_DOWN}
  5418.             if [ "$?" != "0" ]; then
  5419.                 do_exit 12
  5420.             fi
  5421.         fi
  5422.  
  5423.         echo "${vap} ---DOWNLOAD---> ${IFB_DOWN}"
  5424.  
  5425.         cnt=`expr $cnt + 1`
  5426.         vap=$(eval echo \$vap_dl${cnt})
  5427.     done
  5428.  
  5429.     return 0
  5430. }
  5431.  
  5432. tcwr_set_ap83_rules() {
  5433.     local burst_down
  5434.  
  5435.     VAP_LIST=`grep "^VAP_LIST=" /tmp/profile${tcwr_profile}/profile.conf | cut -d'=' -f2 | xargs` 2>/dev/null
  5436.     IF0=$(echo $VAP_LIST | cut -d "," -f1 | cut -d "." -f1)
  5437.     IF0_UPLOAD=$(echo $VAP_LIST | cut -d "," -f1)
  5438.  
  5439.     if [ "$tcwr_down" != "0" ] ; then
  5440.         burst_down=$(expr $(expr $(expr $(expr $tcwr_down \* 1024) \/ 250) \/ 8) \/ 1024)
  5441.         if [ "$burst_down" = "" -o $burst_down -lt 5 ]; then
  5442.             burst_down=5
  5443.         fi
  5444.         tc qdisc add dev $IF0 root handle 1: tbf rate ${tcwr_down}"kbit" burst ${burst_down}"kb" latency 70ms
  5445.         if [ "$?" != "0" ]; then
  5446.             do_exit 13
  5447.         fi
  5448.     fi
  5449.  
  5450.     if [ "$tcwr_up" != "0"  ] ; then
  5451.         tc qdisc add dev $IF0_UPLOAD ingress
  5452.         if [ "$?" != "0" ]; then
  5453.             do_exit 14
  5454.         fi
  5455.         tc filter add dev $IF0_UPLOAD parent ffff: protocol ip prio 20 u32 match u32 0 0 police rate ${tcwr_up}"kbit" buffer 10k drop flowid :1
  5456.         if [ "$?" != "0" ]; then
  5457.             do_exit 15
  5458.         fi
  5459.     fi
  5460. }
  5461.  
  5462. tcwr_clear_ap83_rules() {
  5463.     VAP_LIST=`grep "^VAP_LIST=" /tmp/profile${tcwr_profile}/profile.conf | cut -d'=' -f2 | xargs` 2>/dev/null
  5464.     IF0=$(echo $VAP_LIST | cut -d "," -f1 | cut -d "." -f1)
  5465.     IF0_UPLOAD=$(echo $VAP_LIST | cut -d "," -f1)
  5466.  
  5467.     tc qdisc del dev $IF0 root handle 1: tbf
  5468.     tc qdisc del dev $IF0_UPLOAD ingress
  5469. }
  5470.  
  5471. tcwr_set_upload_limit() {
  5472.     local tmp
  5473.     local PROFILE_DIR
  5474.     local burst_up
  5475.  
  5476.     if [ "$tcwr_on" = "bss" ]; then
  5477.         ## BSS specific rule
  5478.         if [ "$tcwr_up" = "" -o $tcwr_up -le 0 ]; then
  5479.             return
  5480.         fi
  5481.  
  5482.         burst_up=$(expr $(expr $(expr $(expr $tcwr_up \* 1024) \/ 250) \/ 8) \/ 1024)
  5483.         if [ "$burst_up" = "" -o $burst_up -lt 5 ]; then
  5484.             burst_up=5
  5485.         fi
  5486.  
  5487.         tmp=`tc qdisc show dev ${IFB_UP} | grep tbf`
  5488.         if [ "$tmp" != "" ]; then
  5489.             echo "Rule already applied on this BSS. Overriding BSS rule is not supported."
  5490.             # htb already set on this ifb; Ignore
  5491.             return 0
  5492.         fi
  5493.         tc qdisc add dev ${IFB_UP} root handle 1: tbf rate ${tcwr_up}"kbit" burst ${burst_up}kb latency 70ms
  5494.         if [ "$?" != "0" ]; then
  5495.             do_exit 16
  5496.         fi
  5497.         tc qdisc add dev ${IFB_UP} parent 1: handle 2: htb default 1
  5498.         if [ "$?" != "0" ]; then
  5499.             do_exit 17
  5500.         fi
  5501.     elif [ "$tcwr_on" != "" ]; then
  5502.         PROFILE_DIR="/tmp/profile${tcwr_profile}"
  5503.         if [ -e "$PROFILE_DIR/profile.conf" ] ; then
  5504.             if [ "$tcwr_up" = "-1" ]; then
  5505.                 tcwr_up=`grep "^PER_USER_BANDWIDTH_UPLOAD_LIMIT=" $PROFILE_DIR/profile.conf | cut -d'=' -f2 | xargs` 2>/dev/null
  5506.             fi
  5507.         fi
  5508.         if [ "$tcwr_up" = "" -o $tcwr_up -le 0 ]; then
  5509.             return
  5510.         fi
  5511.        
  5512.         burst_up=$(expr $(expr $(expr $(expr $tcwr_up \* 1024) \/ 250) \/ 8) \/ 1024)
  5513.         if [ "$burst_up" = "" -o $burst_up -lt 5 ]; then
  5514.             burst_up=5
  5515.         fi
  5516.  
  5517.         tmp=`tc qdisc show dev ${IFB_UP} | grep htb`
  5518.         if [ "$tmp" = "" ]; then
  5519.             # HTB qdisc not found.
  5520.             tc qdisc add dev ${IFB_UP} root handle 2: htb default 1
  5521.             if [ "$?" != "0" ]; then
  5522.                 do_exit 18
  5523.             fi
  5524.         fi
  5525.  
  5526.         get_mac_bytes
  5527.  
  5528.         echo "tc class add dev ${IFB_UP} parent 2: classid 2:${tcwr_classid} htb rate ${tcwr_up}kbit burst ${burst_up}k"
  5529.         tc class add dev ${IFB_UP} parent 2: classid 2:${tcwr_classid} \
  5530.             htb rate ${tcwr_up}kbit burst ${burst_up}"k"
  5531.         if [ "$?" != "0" ]; then
  5532.             do_exit 19
  5533.         fi
  5534.  
  5535.         echo "tc filter add dev ${IFB_UP} protocol ip parent 2: handle ::${tcwr_classid} prio 1 u32 match u32 0x${mac1}${mac2} 0xffff at -16 match u32 0x${mac3}${mac4}${mac5}${mac6} 0xffffffff at -12 flowid 2:${tcwr_classid}"
  5536.         tc filter add dev ${IFB_UP} protocol ip parent 2: handle ::${tcwr_classid} prio 1 \
  5537.             u32 match u32 0x${mac1}${mac2}${mac3}${mac4} 0xffffffff at -8 \
  5538.             match u32 0x${mac5}${mac6}0000 0xffff0000 at -4 \
  5539.             flowid 2:${tcwr_classid}
  5540.         if [ "$?" != "0" ]; then
  5541.             do_exit 20
  5542.         fi
  5543.        
  5544.         if [ "$IPV6_SUPPORT" = "1" ]; then
  5545.             echo "tc filter add dev ${IFB_UP} protocol ipv6 parent 2: handle ::${tcwr_classid} prio 2 u32 match u32 0x${mac1}${mac2} 0xffff at -16 match u32 0x${mac3}${mac4}${mac5}${mac6} 0xffffffff at -12 flowid 2:${tcwr_classid}"
  5546.             tc filter add dev ${IFB_UP} protocol ipv6 parent 2: handle ::${tcwr_classid} prio 2 \
  5547.             u32 match u32 0x${mac1}${mac2}${mac3}${mac4} 0xffffffff at -8 \
  5548.             match u32 0x${mac5}${mac6}0000 0xffff0000 at -4 \
  5549.             flowid 2:${tcwr_classid}
  5550.             if [ "$?" != "0" ]; then
  5551.                 do_exit 21
  5552.             fi
  5553.         fi
  5554.     fi
  5555. }
  5556.  
  5557. get_mac_bytes() {
  5558.     mac1=`echo ${tcwr_on} | cut -d ":" -f1 | xargs`
  5559.     mac2=`echo ${tcwr_on} | cut -d ":" -f2 | xargs`
  5560.     mac3=`echo ${tcwr_on} | cut -d ":" -f3 | xargs`
  5561.     mac4=`echo ${tcwr_on} | cut -d ":" -f4 | xargs`
  5562.     mac5=`echo ${tcwr_on} | cut -d ":" -f5 | xargs`
  5563.     mac6=`echo ${tcwr_on} | cut -d ":" -f6 | xargs`
  5564. }
  5565.  
  5566. tcwr_set_download_limit() {
  5567.     local tmp
  5568.     local burst_down
  5569.  
  5570.     if [ "$tcwr_on" = "bss" ]; then
  5571.         if [ "$tcwr_down" = "" -o $tcwr_down -le 0 ]; then
  5572.             return
  5573.         fi
  5574.  
  5575.         burst_down=$(expr $(expr $(expr $(expr $tcwr_down \* 1024) \/ 250) \/ 8) \/ 1024)
  5576.         if [ "$burst_down" = "" -o $burst_down -lt 5 ]; then
  5577.             burst_down=5
  5578.         fi
  5579.  
  5580.         ## BSS specific rule
  5581.         tmp=`tc qdisc show dev ${IFB_DOWN} | grep tbf`
  5582.         if [ "$tmp" != "" ]; then
  5583.             echo "Rule already applied on this BSS. Overriding BSS rule is not supported."
  5584.             # htb already set on this ifb; Ignore
  5585.             return 0
  5586.         fi
  5587.         tc qdisc add dev ${IFB_DOWN} root handle 1: tbf rate ${tcwr_down}"kbit" burst ${burst_down}"kb" latency 70ms
  5588.         if [ "$?" != "0" ]; then
  5589.             do_exit 22
  5590.         fi
  5591.         tc qdisc add dev ${IFB_DOWN} parent 1: handle 2: htb default 1
  5592.         if [ "$?" != "0" ]; then
  5593.             do_exit 23
  5594.         fi
  5595.     elif [ "$tcwr_on" != "" ]; then
  5596.         PROFILE_DIR="/tmp/profile${tcwr_profile}"
  5597.         if [ -e "$PROFILE_DIR/profile.conf" ] ; then
  5598.             if [ "$tcwr_down" = "-1" ]; then
  5599.                 tcwr_down=`grep "^PER_USER_BANDWIDTH_DOWNLOAD_LIMIT=" $PROFILE_DIR/profile.conf | cut -d'=' -f2 | xargs` 2>/dev/null
  5600.             fi
  5601.         fi
  5602.  
  5603.         if [ "$tcwr_down" = "" -o $tcwr_down -le 0 ]; then
  5604.             return
  5605.         fi
  5606.  
  5607.         burst_down=$(expr $(expr $(expr $(expr $tcwr_down \* 1024) \/ 250) \/ 8) \/ 1024)
  5608.         if [ "$burst_down" = "" -o $burst_down -lt 5 ]; then
  5609.             burst_down=5
  5610.         fi
  5611.  
  5612.         tmp=`tc qdisc show dev ${IFB_DOWN} | grep htb`
  5613.         if [ "$tmp" = "" ]; then
  5614.             # HTB qdisc not found.
  5615.             tc qdisc add dev ${IFB_DOWN} root handle 2: htb default 1
  5616.             if [ "$?" != "0" ]; then
  5617.                 do_exit 24
  5618.             fi
  5619.         fi
  5620.  
  5621.         get_mac_bytes
  5622.  
  5623.         echo "tc class add dev ${IFB_DOWN} parent 2: classid 2:${tcwr_classid} htb rate ${tcwr_down}kbit burst ${burst_down}k"
  5624.         tc class add dev ${IFB_DOWN} parent 2: classid 2:${tcwr_classid} \
  5625.             htb rate ${tcwr_down}kbit burst ${burst_down}"kb"
  5626.         if [ "$?" != "0" ]; then
  5627.             do_exit 25
  5628.         fi
  5629.  
  5630.         echo "tc filter add dev ${IFB_DOWN} protocol ip parent 2: handle ::${tcwr_classid} prio 1 u32 match u32 0x${mac1}${mac2}${mac3}${mac4} 0xffffffff at -8 match u32 0x${mac5}${mac6} 0xffff0000 at -4 flowid 2:${tcwr_classid}"
  5631.         tc filter add dev ${IFB_DOWN} protocol ip parent 2: handle ::${tcwr_classid} prio 1 \
  5632.             u32 match u32 0x${mac1}${mac2} 0xffff at -16 \
  5633.             match u32 0x${mac3}${mac4}${mac5}${mac6} 0xffffffff at -12 \
  5634.             flowid 2:${tcwr_classid}
  5635.         if [ "$?" != "0" ]; then
  5636.             do_exit 26
  5637.         fi
  5638.        
  5639.         if [ "$IPV6_SUPPORT" = "1" ]; then
  5640.             echo "tc filter add dev ${IFB_DOWN} protocol ipv6 parent 2: handle ::${tcwr_classid} prio 2 u32 match u32 0x${mac1}${mac2}${mac3}${mac4} 0xffffffff at -8 match u32 0x${mac5}${mac6} 0xffff0000 at -4 flowid 2:${tcwr_classid}"
  5641.             tc filter add dev ${IFB_DOWN} protocol ipv6 parent 2: handle ::${tcwr_classid} prio 2 \
  5642.             u32 match u32 0x${mac1}${mac2} 0xffff at -16 \
  5643.             match u32 0x${mac3}${mac4}${mac5}${mac6} 0xffffffff at -12 \
  5644.             flowid 2:${tcwr_classid}
  5645.             if [ "$?" != "0" ]; then
  5646.                 do_exit 27
  5647.             fi
  5648.         fi
  5649.     fi
  5650. }
  5651.  
  5652. get_profile() {
  5653.     echo "$1"
  5654. }
  5655.  
  5656. clear_rule_sta() {
  5657.     ## Clearing Download limits
  5658.     echo "tc filter del dev ${IFB_DOWN} parent 2: protocol ip handle 800::${tcwr_classid} prio 1 u32"
  5659.     tc filter del dev ${IFB_DOWN} parent 2: protocol ip handle 800::${tcwr_classid} prio 1 u32
  5660.     echo "tc class del dev ${IFB_DOWN} parent 2: classid 2:${tcwr_classid}"
  5661.     tc class del dev ${IFB_DOWN} parent 2: classid 2:${tcwr_classid}
  5662.    
  5663. ## Clearing upload limits
  5664.     echo "tc filter del dev ${IFB_UP} parent 2: protocol ip handle 800::${tcwr_classid} prio 1 u32"
  5665.     tc filter del dev ${IFB_UP} parent 2: protocol ip handle 800::${tcwr_classid} prio 1 u32   
  5666.     echo "tc class del dev ${IFB_UP} parent 2: classid 2:${tcwr_classid}"
  5667.     tc class del dev ${IFB_UP} parent 2: classid 2:${tcwr_classid} 
  5668.    
  5669.     ## IPV6 Clearing Download limits
  5670.    
  5671.     if [ "$IPV6_SUPPORT" = "1" ]; then
  5672.         echo "tc filter del dev ${IFB_DOWN} parent 2: protocol ipv6 handle 800::${tcwr_classid} prio 2 u32"
  5673.         tc filter del dev ${IFB_DOWN} parent 2: protocol ipv6 handle 801::${tcwr_classid} prio 2 u32
  5674.  
  5675.         ## Clearing upload limits
  5676.         echo "tc filter del dev ${IFB_UP} parent 2: protocol ipv6 handle 800::${tcwr_classid} prio 2 u32"
  5677.         tc filter del dev ${IFB_UP} parent 2: protocol ipv6 handle 801::${tcwr_classid} prio 2 u32
  5678.     fi
  5679.  
  5680.     echo "tc class del dev ${IFB_DOWN} parent 2: classid 2:${tcwr_classid}"
  5681.     tc class del dev ${IFB_DOWN} parent 2: classid 2:${tcwr_classid}
  5682.  
  5683.     echo "tc class del dev ${IFB_UP} parent 2: classid 2:${tcwr_classid}"
  5684.     tc class del dev ${IFB_UP} parent 2: classid 2:${tcwr_classid}
  5685. }
  5686.  
  5687. tcwr_parse_args() {
  5688.     local i=1
  5689.     local arg
  5690.  
  5691.     while [ $i -le $# ]; do
  5692.         arg=$(eval echo \$${i})
  5693.         case $arg in
  5694.             "limit")
  5695.                 tcwr_action=limit
  5696.                 ;;
  5697.             "clear")
  5698.                 tcwr_action=clear
  5699.                 ;;
  5700.             "profile")
  5701.                 i=`expr $i + 1`
  5702.                 arg=$(eval echo \$${i})
  5703.                 tcwr_profile=$(get_profile $arg)
  5704.                 ;;
  5705.             "sta")
  5706.                 i=`expr $i + 1`
  5707.                 arg=$(eval echo \$${i})
  5708.                 tcwr_on=${arg}
  5709.                 ;;
  5710.             "classid")
  5711.                 i=`expr $i + 1`
  5712.                 arg=$(eval echo \$${i})
  5713.                 tcwr_classid=${arg}
  5714.                 ;;
  5715.             "bss")
  5716.                 tcwr_on=${arg}
  5717.                 ;;
  5718.             "up")
  5719.                 i=`expr $i + 1`
  5720.                 arg=$(eval echo \$${i})
  5721.                 tcwr_up=${arg}
  5722.                 ;;
  5723.             "down")
  5724.                 i=`expr $i + 1`
  5725.                 arg=$(eval echo \$${i})
  5726.                 tcwr_down=${arg}
  5727.                 ;;
  5728.       "priority")
  5729.         i=`expr $i + 1`
  5730.         arg=$(eval echo \$${i})
  5731.         tcwr_priority=${arg}
  5732.         ;;
  5733.             *)
  5734.                 echo "Unrecognized string \"$arg\""
  5735.                 do_exit 28
  5736.         esac
  5737.         i=`expr $i + 1`
  5738.     done
  5739.     if [ "$tcwr_action" = "" -o "$tcwr_profile" = "" -o "$tcwr_on" = "" ]; then
  5740.         echo "action/profile/action_on should not be empty"
  5741.         do_exit 29
  5742.     fi
  5743.     if [ "$tcwr_action" = "limit" -a "$tcwr_up" = "" -a "$tcwr_down" = "" ]; then
  5744.         echo "No Upload and Download Limits specified (Please sepcify at least one of them)"
  5745.         do_exit 30
  5746.     fi
  5747.     if [ "$tcwr_on" != "bss" -a "$tcwr_classid" = "" ]; then
  5748.         echo "Please specify classid"
  5749.         do_exit 31
  5750.     fi
  5751. }
  5752.  
  5753. handle_action_limit() {
  5754.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5755.         if [ "$tcwr_on" = "bss" ]; then
  5756.             tcwr_clear_ap83_rules
  5757.             tcwr_set_ap83_rules
  5758.         fi         
  5759.         return 0
  5760.     fi
  5761.     set_ifb_redir
  5762.     if [ "$?" != 0 ]; then
  5763.         echo "Failed to set Redirections"
  5764.         do_exit 32
  5765.     fi
  5766.  
  5767.     if [ "$tcwr_on" != "bss" ]; then
  5768.         clear_rule_sta
  5769.     fi
  5770.  
  5771.     if [ "$tcwr_up" != "" ]; then
  5772.         tcwr_set_upload_limit
  5773.     fi
  5774.     if [ "$tcwr_down" != "" ]; then
  5775.         tcwr_set_download_limit
  5776.     fi
  5777.     return 0
  5778. }
  5779.  
  5780. handle_action_clear() {
  5781.     if [ "$PLATFORM_TYPE" = "PLATFORM_LITEON_AP83" ]; then
  5782.         if [ "$tcwr_on" = "bss" ]; then
  5783.             tcwr_clear_ap83_rules
  5784.         fi
  5785.         return 0
  5786.     fi
  5787.     if [ "$IFB_DOWN" = "" -a "$IFB_UP" = "" ]; then
  5788.         echo "Rules already cleared for this profile"
  5789.         do_exit 0
  5790.     fi
  5791.     if [ "$tcwr_on" = "bss" ]; then
  5792.         clear_ifb_redir
  5793.     else
  5794.         clear_rule_sta
  5795.     fi
  5796.     return 0
  5797. }
  5798.  
  5799. ## main ##
  5800. rm -f /tmp/.tcwr_done
  5801.  
  5802. IPV6_SUPPORT=`cat /opt/sensor/capability.conf |  sed 's/^[[:blank:]]*//;' | grep "^advance_ipv6" | cut -d "=" -f2 | xargs`
  5803. tcwr_action=""
  5804. tcwr_up=""
  5805. tcwr_on=""
  5806. tcwr_profile=""
  5807. tcwr_down=""
  5808. tcwr_classid=""
  5809. tcwr_ssid=""
  5810. tcwr_priority=""
  5811. tcwr_parse_args $*
  5812. echo tcwr_action=$tcwr_action
  5813. echo tcwr_up=$tcwr_up
  5814. echo tcwr_on=$tcwr_on
  5815. echo tcwr_profile=$tcwr_profile
  5816. echo tcwr_down=$tcwr_down
  5817.  
  5818. echo "PLATFORM=$PLATFORM_TYPE"
  5819.  
  5820. get_ifaces
  5821. if [ "$?" != 0 ]; then
  5822.     echo "Failed to find VAP_LIST"
  5823.     do_exit 33
  5824. fi
  5825.  
  5826. lookup_ifb
  5827. echo "IFB_UP=$IFB_UP"
  5828. echo "IFB_DOWN=$IFB_DOWN"
  5829.  
  5830. if [ "$tcwr_action" = "limit" ]; then
  5831.     handle_action_limit
  5832. else
  5833.     handle_action_clear
  5834. fi
  5835.  
  5836. if [ "$tcwr_on" = "bss" ]; then
  5837.   if [ "$tcwr_action" = "limit" ]; then
  5838.       echo "bw inform $tcwr_action $tcwr_ssid $tcwr_on up $tcwr_up down $tcwr_down pri $tcwr_priority profile $tcwr_profile"
  5839.       bw inform $tcwr_action $tcwr_ssid $tcwr_on up $tcwr_up down $tcwr_down pri $tcwr_priority profile $tcwr_profile
  5840.   else
  5841.     echo "bw inform $tcwr_action $tcwr_ssid $tcwr_on pri $tcwr_priority profile $tcwr_profile"
  5842.     bw inform $tcwr_action $tcwr_ssid $tcwr_on pri $tcwr_priority profile $tcwr_profile
  5843.   fi
  5844. else
  5845.   if [ "$tcwr_action" = "limit" ]; then
  5846.       echo "bw inform $tcwr_action $tcwr_ssid sta $tcwr_on up $tcwr_up down $tcwr_down pri $tcwr_priority profile $tcwr_profile"
  5847.       bw inform $tcwr_action $tcwr_ssid sta $tcwr_on up $tcwr_up down $tcwr_down pri $tcwr_priority profile $tcwr_profile
  5848.   else
  5849.     echo "bw inform $tcwr_action $tcwr_ssid sta $tcwr_on pri $tcwr_priority profile $tcwr_profile"
  5850.     bw inform $tcwr_action $tcwr_ssid sta $tcwr_on pri $tcwr_priority profile $tcwr_profile
  5851.   fi
  5852. fi
  5853.  
  5854. do_exit 0
  5855.  
  5856. ==> ./update_smp_affinity.sh <==
  5857. #!/bin/sh
  5858. #
  5859. # Copyright (c) 2015 The Linux Foundation. All rights reserved.
  5860. # Copyright (C) 2011 OpenWrt.org
  5861.  
  5862. enable_smp_affinity_wifi() {
  5863.     local device="$1"
  5864.     local hwcaps smp_affinity=1
  5865.  
  5866.     hwcaps=$(cat /sys/class/net/$device/hwcaps)
  5867.     irq_affinity_num=`grep $device /proc/interrupts | cut -d ':' -f 1 | tr -d ' '`
  5868.  
  5869.     case "${hwcaps}" in
  5870.         *11an/ac)
  5871.             smp_affinity=2
  5872.         ;;
  5873.     esac
  5874.  
  5875.     [ -n "$irq_affinity_num" ] && echo $smp_affinity > /proc/irq/$irq_affinity_num/smp_affinity
  5876. }
  5877.  
  5878. ==> ./validate_ip_address.sh <==
  5879. #!/bin/sh
  5880.  
  5881. is_ipv6_address () {
  5882.     __WORD="[0-9A-Fa-f]\{1,4\}"
  5883. # flat address, no compressed __WORDs
  5884.     __FLAT="^${__WORD}\(:${__WORD}\)\{7\}$"
  5885. # ::'s compressions excluding beginning and end edge cases
  5886.     __COMP2="^\(${__WORD}:\)\{1,1\}\(:${__WORD}\)\{1,6\}$"
  5887.     __COMP3="^\(${__WORD}:\)\{1,2\}\(:${__WORD}\)\{1,5\}$"
  5888.     __COMP4="^\(${__WORD}:\)\{1,3\}\(:${__WORD}\)\{1,4\}$"
  5889.     __COMP5="^\(${__WORD}:\)\{1,4\}\(:${__WORD}\)\{1,3\}$"
  5890.     __COMP6="^\(${__WORD}:\)\{1,5\}\(:${__WORD}\)\{1,2\}$"
  5891.     __COMP7="^\(${__WORD}:\)\{1,6\}\(:${__WORD}\)\{1,1\}$"
  5892. # trailing :: edge case, includes case of only :: (all 0's)
  5893.     __EDGE_TAIL="^\(\(${__WORD}:\)\{1,7\}\|:\):$"
  5894. # leading :: edge case
  5895.     __EDGE_LEAD="^:\(:${__WORD}\)\{1,7\}$"
  5896.  
  5897.     echo $1 | grep -q "\(${__FLAT}\)\|\(${__COMP2}\)\|\(${__COMP3}\)\|\(${__COMP4}\)\|\(${__COMP5}\)\|\(${__COMP6}\)\|\(${__COMP7}\)\|\(${__EDGE_TAIL}\)\|\(${__EDGE_LEAD}\)"
  5898.     if [ $? -eq 0 ]; then
  5899.         return 1
  5900.     fi
  5901.         return 0
  5902. }
  5903.  
  5904. is_ipv4_address () {
  5905.     __QUAD="25[0-5]\|2[0-4][0-9]\|[0-1]\?[0-9]\?[0-9]"
  5906.  
  5907.     echo $1 | grep -q "^\(${__QUAD}\)\(\.\(${__QUAD}\)\)\{3\}"
  5908.     if [ $? -eq 0 ]; then
  5909.         return 1
  5910.     fi
  5911.         return 0
  5912. }
  5913.  
  5914. which_ip_address () {
  5915.     is_ipv6_address $1
  5916.     if [ $? -eq 1 ]; then
  5917.         return 6
  5918.     else
  5919.         is_ipv4_address $1
  5920.         if [ $? -eq 1 ]; then
  5921.             return 4
  5922.         else
  5923.             return 0
  5924.         fi
  5925.     fi
  5926. }
  5927.  
  5928. # To merge namerservers and search entries for IPv4 and IPv6
  5929. merge_dns_entries_sensor()
  5930. {
  5931.     DNS_FILE=$1
  5932.     DNS_FILE_IPv4=$2
  5933.     DNS_FILE_IPv6=$3
  5934.  
  5935.     if [ ! -f "$DNS_FILE_IPv4" ] && [ ! -f "$DNS_FILE_IPv6" ] ; then
  5936.         # Return if both resolve.conf are absent.
  5937.         # Either variable is not set properly or something has gone wrong
  5938.         return 1
  5939.     fi
  5940.     DNS_FILE=$1
  5941.     local ipv6_search
  5942.     /bin/sh -c "echo > $DNS_FILE"
  5943.     if [ -f "$DNS_FILE_IPv4" ] ; then
  5944.         /bin/sh -c "cat $DNS_FILE_IPv4 > $DNS_FILE"
  5945.     fi
  5946.     if [ -f "$DNS_FILE_IPv6" ] ; then
  5947.         if (grep -q search $DNS_FILE) ; then
  5948.             local ipv6_search=`grep search "$DNS_FILE_IPv6" | awk '{print $2}'`
  5949.             if [ ! -z "$ipv6_search" ] ; then
  5950.                 /bin/sh -c "sed -i \"s/^search.*/& $ipv6_search/\" $DNS_FILE"
  5951.             fi
  5952.             /bin/sh -c "grep nameserver $DNS_FILE_IPv6 >> $DNS_FILE"
  5953.         else
  5954.             /bin/sh -c "cat $DNS_FILE_IPv6 >> $DNS_FILE"
  5955.         fi
  5956.     fi
  5957. }
  5958.  
  5959.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement