[CORD-1305] PPPoE Client
Change-Id: Id5ae5ba0ce0cbb89d434fb34d4c42796c61c059e
diff --git a/extensions/pppoe/scripts/vsg_vcpe_proxy_setup.sh b/extensions/pppoe/scripts/vsg_vcpe_proxy_setup.sh
new file mode 100755
index 0000000..cd734b2
--- /dev/null
+++ b/extensions/pppoe/scripts/vsg_vcpe_proxy_setup.sh
@@ -0,0 +1,196 @@
+#!/usr/bin/env bash
+#************************************************************/
+#** File: vsg_vcpe_proxy_setup.sh */
+#** Contents: Contains shell script to setup packages & */
+#** applications inside the VCPE. */
+#************************************************************/
+
+time_begin=`date`
+echo $time_begin
+echo "vsg_vcpe_proxy_setup.sh: Begin"
+
+function extract_stag_ctag() {
+ echo "Entering extract_stag_ctag function.."
+ VCPE_NAME=$VCPEPROXY_NAME
+ echo "Input String $VCPE_NAME"
+ vcpe_substrings=$( echo $VCPE_NAME | tr "-" "\n" )
+ i=0
+ for str in $vcpe_substrings
+ do
+ echo "i=$i str=$str"
+ if [ $i -eq 1 ]; then
+ stag=$str
+ fi
+ if [ $i -eq 2 ]; then
+ ctag=$str
+ fi
+ i=$(( i + 1 ))
+ done
+
+ echo "Parsed String output: stag=$stag ctag=$ctag "
+ STAG=$stag; export STAG
+ CTAG=$ctag; export CTAG
+}
+
+function install_restserver() {
+ echo "install_rest(): Installing REST artifacts in docker instance: $VCPEPROXY_NAME"
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get update
+ echo "Installing npm.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install npm -y
+ echo "Installing json-server.."
+ time sudo docker exec -t $VCPEPROXY_NAME npm install -g json-server@0.9.6
+ echo "Installing line-reader.."
+ time sudo docker exec -t $VCPEPROXY_NAME npm install -g line-reader
+ echo "Installing bluebird.."
+ time sudo docker exec -t $VCPEPROXY_NAME npm install -g bluebird
+#PPPoE http server
+ echo "Installing express.."
+ time sudo docker exec -t $VCPEPROXY_NAME npm install -g express
+ echo "Installing body-parser.."
+ time sudo docker exec -t $VCPEPROXY_NAME npm install -g body-parser
+#PPPoE http server end
+}
+
+function install_pppoe_soft() {
+ echo "install_pppoe_soft(): Installing PPPoE software in $VCPEPROXY_NAME"
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get update
+ echo "Installing ppp.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install ppp -y
+ echo "Installing pppoe.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install pppoe -y
+}
+
+function install_ipv6_soft() {
+ echo "install_pppoe_soft(): Installing IPv6 software in $VCPEPROXY_NAME"
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get update
+ echo "Installing DHCPv6.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install radvd -y
+}
+
+function install_network_soft() {
+ echo "install_soft(): Installing required software in $VCPEPROXY_NAME"
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get update
+ echo "Installing iptables.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install iptables -y
+ echo "Installing tcpdump..."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install tcpdump -y
+ echo "installing Node Js.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install nodejs -y
+ echo "installing...sshpass.."
+ time sudo docker exec -t $VCPEPROXY_NAME apt-get install sshpass -y
+}
+
+function get_vcpeproxy_wan_ip() {
+ echo "Entering get_vcpeproxy_wan_ip function.."
+ addr=`sudo docker exec -t $VCPEPROXY_NAME ifconfig $VCPEPROXY_WAN_IFACE|grep "inet addr"| awk '{ print $2 }'`
+
+ addr=`echo $addr|tr ":" "\n"`
+ i=1
+ for str in $addr
+ do
+ echo "i=$i str=$str"
+ if [ $i -eq 2 ]; then
+ VCPEPROXY_WAN_IP=$str; export VCPEPROXY_WAN_IP
+ fi
+ i=$(( i + 1 ))
+ done
+ echo "Returning $VCPEPROXY_WAN_IP"
+}
+
+function install_and_spinup_apmgmt() {
+ if [ -z $VCPEPROXY_DOCKER_HOME ]; then
+ echo "cleaning up $VCPEPROXY_DOCKER_HOME directory"
+ sudo -E docker exec -t $VCPEPROXY_NAME rm -rf $VCPEPROXY_DOCKER_HOME
+ fi
+ sudo -E docker exec -t $VCPEPROXY_NAME mkdir -p $VCPEPROXY_DOCKER_HOME
+ sudo docker cp $vsg_home_dir/$vsg_env_file $VCPEPROXY_NAME:$VCPEPROXY_DOCKER_HOME
+ echo "VCPEPROXY_WAN_IP=$VCPEPROXY_WAN_IP"
+
+ # VLAN information
+ echo "{\"s-vlan\":\"$STAG\",\"c-vlan\":\"$CTAG\"}" > $vsg_home_dir/$PPPOE_AP_MGMT_DIR/info.txt
+ # Information on device for ONOS network configuration
+ echo "curl -X POST http://$NETCFG_CONSOLIDATOR_IP:$NETCFG_RESTAPI_PORT/rest:$VCPEPROXY_WAN_IP:$AP_RESTAPI_PORT" > $vsg_home_dir/$PPPOE_AP_MGMT_DIR/$AP_REST_NETCFG
+ chmod +x $vsg_home_dir/$PPPOE_AP_MGMT_DIR/$AP_REST_NETCFG
+
+ echo "Archiving it to $APMGMT_TAR_FILE"
+ cd $vsg_home_dir/$PPPOE_AP_MGMT_DIR; tar -cvf - . >$APMGMT_TAR_FILE
+ sudo docker cp $APMGMT_TAR_FILE $VCPEPROXY_NAME:$NODEJS_MODULES_DIR
+ echo "Archiving it to $IPV6_TAR_FILE"
+ cd $vsg_home_dir/$IPV6_AP_DIR; tar -cvf - . >$IPV6_TAR_FILE
+ sudo docker cp $IPV6_TAR_FILE $VCPEPROXY_NAME:$VCPEPROXY_DOCKER_HOME
+ sudo docker cp $vsg_home_dir/$proxy_ap_mgmt_start_script $VCPEPROXY_NAME:$VCPEPROXY_DOCKER_HOME
+ sudo docker cp $vsg_home_dir/$proxy_ap_mgmt_stop_script $VCPEPROXY_NAME:$VCPEPROXY_DOCKER_HOME
+ sudo docker cp $vsg_home_dir/$proxy_ipv6_setup $VCPEPROXY_NAME:$VCPEPROXY_DOCKER_HOME
+ sudo docker exec $VCPEPROXY_NAME chmod +x $VCPEPROXY_DOCKER_HOME/$proxy_ap_mgmt_start_script
+ sudo docker exec $VCPEPROXY_NAME chmod +x $VCPEPROXY_DOCKER_HOME/$proxy_ap_mgmt_stop_script
+ sudo docker exec $VCPEPROXY_NAME chmod +x $VCPEPROXY_DOCKER_HOME/$proxy_ipv6_setup
+ if [[ "x$VSG_DOCKER_IPV4" != "xipv4" ]]; then
+ echo "Setup and start IPv6 apps"
+ sudo docker exec $VCPEPROXY_NAME $VCPEPROXY_DOCKER_HOME/$proxy_ipv6_setup
+ fi
+
+ echo "mv json-server:/usr/local/lib/node_modules/json-server/lib/server/public"
+ sudo docker exec $VCPEPROXY_NAME mv /usr/local/lib/node_modules/json-server/lib/server/public/index.html /usr/local/lib/node_modules/json-server/lib/server/public/index.html_sav
+
+ echo "Starting proxy_ap_mgmt_start_script"
+ sudo docker exec $VCPEPROXY_NAME $VCPEPROXY_DOCKER_HOME/$proxy_ap_mgmt_start_script $VSG_DOCKER_IPV4
+ echo "Started proxy_ap_mgmt_start_script"
+ echo "check whether nodejs is running"
+ sudo docker exec $VCPEPROXY_NAME ps -fade|grep nodejs
+}
+
+function send_device_info_to_consolidator () {
+ sudo docker exec $VCPEPROXY_NAME ps -fade|grep nodejs|grep cController > /dev/null 2>&1
+ if [ "$?" == 0 ]; then
+ echo "Posting rest:$VCPEPROXY_WAN_IP:$AP_RESTAPI_PORT to consolidator..."
+ sudo docker exec $VCPEPROXY_NAME bash $NODEJS_MODULES_DIR$AP_REST_NETCFG
+ fi
+}
+
+VCPEPROXY_NAME=$1; export VCPEPROXY_NAME
+VSG_ID=$2; export VSG_ID
+VCPE_PROXY_ID=$3; export VCPE_PROXY_ID
+
+if [ -z $VCPEPROXY_NAME ]; then
+ echo " Missing Argument: VCPEPROXY_NAME...."
+ exit 1
+fi
+if [ -z $VSG_ID ]; then
+ echo " Missing Argument: VSG_ID...."
+ exit 1
+fi
+if [ -z $VCPE_PROXY_ID ]; then
+ echo " Missing Argument: VCPE_PROXY_ID...."
+ exit 1
+fi
+echo "Reinitializing $VCPEPROXY_NAME docker as vcpe proxy"
+extract_stag_ctag
+sudo -E $vsg_home_dir/$respin_vcpeproxy_docker_script
+
+# Check whethere necessary packages are installed in VCPE
+sudo docker exec $VCPEPROXY_NAME which nodejs > /dev/null 2>&1
+if [ "$?" == 1 ]; then
+ # VCPE docker image may be from repository, then install necessary packages
+ echo "Continuing the installation of vcpe_proxy docker"
+ install_network_soft
+ echo "Installing rest servcer"
+ install_restserver
+ echo "Installing pppoe soft"
+ install_pppoe_soft
+ echo "Installing ipv6 soft"
+ install_ipv6_soft
+fi
+echo "Extracting vcpeproxy_wan_ip"
+get_vcpeproxy_wan_ip
+echo "Before AP mgmt spinup...VCEPROXY_WAN_IP=$VCPEPROXY_WAN_IP"
+install_and_spinup_apmgmt
+echo "Before sending device info to consolidator..."
+send_device_info_to_consolidator
+
+# To indicate VCPE setup completion
+time_end=`date`
+echo "Begin $time_begin" > $vsg_home_dir/$VCPEPROXY_NAME
+echo $VCPEPROXY_NAME >> $vsg_home_dir/$VCPEPROXY_NAME
+echo "End $time_end" >> $vsg_home_dir/$VCPEPROXY_NAME
+echo $time_end
+echo "vsg_vcpe_proxy_setup.sh: End"