1#!/bin/sh 2 3# 4# Copyright (C) 2012 The Android Open Source Project 5# 6# Licensed under the Apache License, Version 2.0 (the "License"); 7# you may not use this file except in compliance with the License. 8# You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, software 13# distributed under the License is distributed on an "AS IS" BASIS, 14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15# See the License for the specific language governing permissions and 16# limitations under the License. 17# 18 19# Backchannel control script - sets up and tears down backchannel network 20# interfaces. Backchannel interfaces are hidden from flimflam and will never be 21# the default route. 22# 23# A backchannel interface can also be used to simulate a cellular 24# modem used by fake-cromo if the new interface name is set to 25# pseudo-modem0 26# 27 28test_if=eth_test 29 30usage () { 31 echo "Usage: $0 <command> [args...]" 32 echo " setup <iface> [new_iface_name] Set <iface> as backchannel device" 33 echo " teardown <iface> [new_iface_name] Return backchannel device to normal" 34 echo " reach <ip> <gw> [new_iface_name] Route <ip> via gateway <gw>" 35} 36 37macaddr() { 38 ip addr show "$1" | awk '/link\/ether/ { print $2 }' 39} 40 41ipaddr_with_subnet_mask() { 42 ip addr show "$1" | awk '/inet / { print $2 }' 43} 44 45# We need to down the interface (and therefore stop flimflam) across the 46# invocation of nameif, according to nameif(1). 47renameif() { 48 old="$1" ; shift 49 new="$1" ; shift 50 initctl stop shill 51 ip link set "$old" down 52 nameif "$new" $(macaddr "$old") 53 ip link set "$new" up 54 initctl start shill 55} 56 57setup() { 58 oldip=$(ipaddr_with_subnet_mask "$1") 59 if [ ! -z $2 ] ; then 60 test_if="$2" 61 fi 62 renameif "$1" "$test_if" 63 ip addr add "$oldip" dev "$test_if" 64} 65 66teardown() { 67 if [ ! -z $2 ] ; then 68 test_if="$2" 69 fi 70 renameif "$test_if" "$1" 71} 72 73reach() { 74 ip="$1" ; shift 75 gw="$1" ; shift 76 if [ ! -z $1 ] ; then 77 test_if="$1" 78 fi 79 ip route add "$ip" via "$gw" dev "$test_if" 80} 81 82if [ -z "$1" ]; then 83 usage 84 exit 1 85fi 86 87command="$1" ; shift 88case "$command" in 89 setup) 90 setup "$@" 91 ;; 92 teardown) 93 teardown "$@" 94 ;; 95 reach) 96 reach "$@" 97 ;; 98 *) 99 usage 100 ;; 101esac 102