This file is indexed.

/usr/sbin/fai-mk-network is in fai-server 5.0.3ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#! /bin/bash

#*********************************************************************
#
# fai-mk-network -- setup a test network for FAI
#
# This script is part of FAI (Fully Automatic Installation)
# (c) 2015 by Thomas Lange, lange@informatik.uni-koeln.de
# Universitaet zu Koeln
#
#*********************************************************************

PATH=/sbin:/bin:/usr/sbin:/usr/bin

tapnum=9          # how many tap devies will be created
brip=192.168.33.1 # IP of bridge device
brname=br0
netdev=eth0       # network device used for routing to the outside internet

usage() {

    cat <<EOF
fai-mk-network, setup a test network for FAI

   Copyright (C) 2015 by Thomas Lange

Usage: fai-mk-network  {OPTIONS} USER

   -r                   Remove the network setup.
   -P                   Do not put the bridge into a private network

DESCRIPTION
fai-mk-network creates $tapnum tap devices which are added to a software bridge.
The tap devices will belong to the user specified. This bridge will be on a
private subnet ($brip/24) unless -P is specified. Also a NATing is enabled for
the private subnet. Using -P the bridge will use the network of $netdev instead
of a private subnet. Do not call this command in a network mounted directory
when using -P. You can configure different settings by modifying some variables
in the script itself.

Using fai-kvm(1) you can start virtual machines which are connected
to one of the tap devices.
EOF
    exit 0
}


mk_tap_devices() {

  for i in $(eval echo {1..$tapnum}); do
      [ -f /sys/class/net/tap$i/address ] && continue
      ip tuntap add dev tap$i mode tap user $user
      # when mixing tap devices and a real eth0 into a bridge, the
      # ethernet device should alsways have the lowest MAC address.
      # A bridge always uses the smallest/lowest MAC address when
      # doing dhcp requests. Make sure the tap devices have a high MAC address
      # change MAC address, so it begins with fX:
      mac=`sed -e 's/^./f/' /sys/class/net/tap$i/address`
      ip link set tap$i address $mac
  done
}

mk_bridge() {


    if [ $private -eq 0 ]; then
	dhclient -r $netdev
	ip addr flush $netdev            # remove IP address of real nic
	ip link set $netdev down
	ip link set $netdev name r$netdev
	brname=$netdev                   # use name of NIC for bridge
    fi

    brctl addbr $brname
    ip link set $brname up
    if [ $private -eq 0 ]; then
	brctl addif $brname r$netdev
	ip link set r$netdev up
	dhclient -v $netdev
    else
	ip addr add $brip/24 brd + dev $brname
    fi

    for i in $(eval echo {1..$tapnum}); do
	[ -f /sys/class/net/tap$i/address ] || continue
	brctl addif $brname tap$i          # add device to the bridge
	ip link set tap$i up
    done
}

rm_bridge() {

    for i in $(eval echo {1..$tapnum}); do
	[ -f /sys/class/net/tap$i/address ] || continue
	brctl delif $brname tap$i
	ip link set tap$i down
	ip tuntap del dev tap$i mode tap
    done

    if [ $private -eq 0 ]; then
	brname=$netdev                   # use name of NIC for bridge
	dhclient -r $netdev
	brctl delif $brname r$netdev
    fi


    ip link set $brname down
    ip addr flush $brname
    brctl delbr $brname

    if [ $private -eq 1 ]; then
	iptables -t nat -D POSTROUTING -o $netdev -j MASQUERADE
	sysctl -w net.ipv4.ip_forward=0
    else
	ip link set r$netdev down
	ip link set r$netdev name $netdev
	ip link set $netdev up
	dhclient -v $netdev
    fi
    exit 0
}


remove=0
private=1 # private network by default

while getopts Phr opt ; do
    case "$opt" in
        r) remove=1;;
        P) private=0 ;;
        h) usage ;;
        esac
done
shift $(($OPTIND - 1))

if [ $(id -u) != "0" ]; then
    echo "You must run this program as root."
    echo
    usage
fi

if [ ! -x "$(which brctl)" ]; then
    echo "brctl not found. Please install bridge-utils."
    exit 3
fi

if [ $remove -eq 1 ]; then
    rm_bridge
fi

if [ -z "$1" ]; then
    echo "Please add a user name which will own the tap devices."
    echo ""
    usage
fi
user=$1


mk_tap_devices
mk_bridge

# enable forward IP and do NATing
if [ $private -eq 1 ]; then
    sysctl -w net.ipv4.ip_forward=1
    iptables -t nat -I POSTROUTING -o $netdev -j MASQUERADE
fi


#  entry for /etc/network/interfaces:
#  auto br0
#  iface br0 inet static
#  address 192.168.33.1
#  netmask 255.255.255.0
#  bridge_ports regex (tap).*