summaryrefslogtreecommitdiff
path: root/scripts/tcos-top/05network
blob: f5065f2aec4a4b6eeaf300302e0511cc68e1a08b (plain)
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
#!/bin/sh
# 
if [ "$1" = "prereqs" ]; then
  exit 0
fi

quiet=n



. /scripts/functions
. /conf/tcos.conf
. /conf/tcos-run-functions

# if break=sqmount STOP here
maybe_break network

# localhost
log_begin_msg "Bring up Local loopback device"
 ifconfig lo up
log_end_msg $?

touch /etc/resolv.conf

#if [ -d /var/lib/dhcp3 ]; then
#  # link to work with dhcp-client or dhcp3-client
#  ln -s /var/lib/dhcp3 /var/lib/dhcp

#  chown root:dhcp /lib/dhcp3-client 2>/dev/null
#  chown 775 /lib/dhcp3-client
#  chmod 4744 /lib/dhcp3-client/call-dhclient-script

#  chown root:dhcp /etc/resolv.conf 2>/dev/null
#  chmod 644 /etc/resolv.conf
#fi

# wireless TCOS minihowto
#
#  start thin client with something like this:
#
# boot: tcos wifi=1 essid="ESSID" server=xx.xx.xx.xx
# * server is tftpd and XMDCP host
# * ESSID is wireless network


if [ $(read_cmdline_var 'wifi' '0') = "1" ]; then
  # load kernel modules
  log_begin_msg "Loading wireless kernel modules"
    modprobe -q arc4
    modprobe -q ecb
    modprobe -q mac80211
    modprobe -q ieee80211_crypt
    modprobe -q ieee80211
    modprobe -q ieee80211softmac
    #modprobe -q rc80211_simple

    for kmod in $TCOS_WIRELESS_MODS; do
      if [ "$kmod" = "madwifi" ]; then
        #ath-pci ath-hal wlan_tkip wlan_scan_sta ath-hal
        modprobe -q ath-pci 2>/dev/null
        modprobe -q ath-hal 2>/dev/null
        modprobe -q wlan_tkip 2>/dev/null
        modprobe -q wlan_scan_sta 2>/dev/null
      elif [ "$kmod" = "zd1211" -o "$kmod" = "zd1211rw" ]; then
        modprobe -q zd1211rw 2>/dev/null
      elif [ "$kmod" = "rt2400" -o "$kmod" = "rt2400pci" ]; then
        modprobe -q rt2400pci 2>/dev/null
      elif [ "$kmod" = "rt2500" -o "$kmod" = "rt2500pci" ]; then
        modprobe -q rt2500pci 2>/dev/null
      elif [ "$kmod" = "rt61" -o "$kmod" = "rt2561" -o "$kmod" = "rt61pci" ]; then
        modprobe -q rt61pci 2>/dev/null
      elif [ "$kmod" = "rt73" -o "$kmod" = "rt73usb" ]; then
        modprobe -q rt73usb 2>/dev/null
      elif [ "$kmod" = "bcm43xx" -o "$kmod" = "broadcom" ]; then
        modprobe -q bcm43xx 2>/dev/null
      else
        modprobe -q $kmod 2>/dev/null
      fi
    done
  log_end_msg 0
fi

# get list of network interfaces
TCOS_NET_ACTIVE="eth0"
TCOS_NET_WIFI=0
TCOS_NET_WIFI_ESSID=""
TCOS_NET_WIFI_KEYMODE=""
TCOS_NET_DEVS=$(ls /sys/class/net/ |grep -v -e lo -e sit0 -e wmaster -e pan)
TCOS_NET_LINK=""
TCOS_NET_LINK_NUMBER=0


# search for network interfaces with link ok status
for dev in $TCOS_NET_DEVS; do
    # need to up iface
    ifconfig $dev up >> /tmp/initramfs.debug 2>&1
    # have link ???
    if [ -e /sys/class/net/$dev/carrier ]; then
       if [ "$(cat /sys/class/net/$dev/carrier 2>/dev/null)" != "1" ]; then
           # some gigabit cards take some time to negotiate network link
           log_begin_msg "Waiting for netlink in $dev"
           sleep 10
           log_end_msg
       fi
       if [ "$(cat /sys/class/net/$dev/carrier 2>/dev/null)" = "1" ]; then
          _log "05NETWORK found carrier link in $dev iface"
          TCOS_NET_LINK="$TCOS_NET_LINK $dev"
          TCOS_NET_LINK_NUMBER=$(($TCOS_NET_LINK_NUMBER+1))
       fi
    fi
done

if [ $(read_cmdline_var 'wifi' '0') = "1" ]; then
  #force wireless, read some vars
  TCOS_NET_WIFI_ESSID=$(read_cmdline_var "essid" "")
  for dev in $TCOS_NET_DEVS; do
    # is wireless????
    if [ -d /sys/class/net/$dev/wireless ]; then
      TCOS_NET_WIFI=1
      TCOS_NET_LINK=$dev
      # stop searching
      break
    fi
  done
fi


if [ $TCOS_NET_WIFI = 1 ]; then
    # one iface wireless
    TCOS_NET_ACTIVE=$TCOS_NET_LINK

elif [ $TCOS_NET_LINK_NUMBER -gt 1 ]; then
    # we have some ifaces with link
    _log "05NETWORK various net ifaces have link"
    
elif [ $TCOS_NET_LINK_NUMBER = 1 ]; then
    # one iface
    TCOS_NET_ACTIVE=$TCOS_NET_LINK

else
    # not link !!!
    panic "ERROR: No link network detected, check cable."
fi

 # break for wireless
 maybe_break wireless

 if [ $TCOS_NET_WIFI = 1 ]; then

    #ifconfig $TCOS_NET_ACTIVE down
    #ifconfig $TCOS_NET_ACTIVE up
    
    [ -z $TCOS_NET_WIFI_KEYMODE ] && TCOS_NET_WIFI_KEYMODE="restricted"
    # scan wireless
    log_begin_msg "Scanning wireless networks"
      iwlist $TCOS_NET_ACTIVE scan | grep ESSID | awk -F ":" '{print $2}' | sed s/\"//g >> /tmp/initramfs.debug 2>&1
    log_end_msg $?

    log_begin_msg "Wireless associating with $TCOS_NET_WIFI_ESSID"
      iwconfig $TCOS_NET_ACTIVE essid "$TCOS_NET_WIFI_ESSID"
    log_end_msg $?

    # associate if ap cmdline var is set
    if [ "$TCOS_NET_WIFI_ESSID" != "" ]; then
       if [ "$TCOS_WIRELESS_ENC" = "WPA" ]; then
           modprobe -q michael_mic
           modprobe -q blkcipher
           modprobe -q aes
           modprobe -q ieee80211_crypt_tkip
           modprobe -q ieee80211_crypt_ccmp
           log_begin_msg "Wireless WPA mode"
             /sbin/start-wpa.sh "${TCOS_NET_ACTIVE}"
           log_end_msg $?
       fi
       
       if [ "$TCOS_WIRELESS_ENC" = "WEP" ]; then
           modprobe -q ieee80211_crypt_wep
           log_begin_msg "Wireless WEP mode setting key"
             if [ ! -z $TCOS_WIRELESS_KEY ];then
               iwconfig $TCOS_NET_ACTIVE key $TCOS_NET_WIFI_KEYMODE $TCOS_WIRELESS_KEY
             fi
           log_end_msg $?
       fi
    else
       log_begin_msg "Wireless associating with any"
         iwconfig $TCOS_NET_ACTIVE essid any
       log_end_msg $?
    fi
 #else
 #   # wired network
 #   ifconfig $TCOS_NET_ACTIVE down
 #   ifconfig $TCOS_NET_ACTIVE up
 fi
 
 
 log_begin_msg "Sending DHCP request on $TCOS_NET_LINK"
  _log "DHCLIENT $TCOS_NET_LINK"
  if [ -x /sbin/udhcpc ]; then
    /sbin/udhcpc -i $TCOS_NET_LINK -s /bin/udhcpc-script >> /tmp/initramfs.debug  2>&1
  else
    busybox udhcpc -i $TCOS_NET_LINK -s /bin/udhcpc-script -O swapsrv >> /tmp/initramfs.debug  2>&1
  fi
  myip=$(awk -F"=" '/^ip=/ {print $2}' /tmp/net.data)
  dhcpserver=$(awk -F"=" '/^serverid=/ {print $2}' /tmp/net.data)
  hostname=$(awk -F"=" '/^hostname=/ {print $2}' /tmp/net.data)
  netmask=$(awk -F"=" '/^netmask=/ {print $2}' /tmp/net.data)
  gateway=$(awk -F"=" '/^gateway=/ {print $2}' /tmp/net.data)
  TCOS_NET_ACTIVE=$(awk -F"=" '/^interface=/ {print $2}' /tmp/net.data)
  xserver=$(awk -F"=" '/^swapsrv=/ {print $2}' /tmp/net.data)
 log_end_msg 0


if [ -n ${TCOS_DEBUG} ]; then
  _log "NETWORK data: ip=${myip} server=${dhcpserver} hostname=${hostname}"
fi

# count number of ":" in hostname string
if [ $(echo $hostname | awk '{print split($1, A, ":")}') -gt 1 ]; then
  if [ -x /bin/hex2ascii ]; then
    # got an hexadecimal hostname
    hostname2=$(hex2ascii $hostname)
    _log "NETWORK HEX hostname \"$hostname\"=\"$hostname2\""
    hostname=$hostname2
  fi
fi

if [ -z $hostname ] || [ "x{$hostname}" = "x " ]; then
  panic "ERROR: DHCP server don't give me a hostname !!! Edit /etc/hosts in dhcp server"
fi

# search for other hosts
TCOS_TFTP_SERVER=$(read_cmdline_var 'tftpserver' "${dhcpserver}")

if [ "$xserver" != "" ]; then
  TCOS_SERVER=$(read_cmdline_var 'server' "${xserver}")
  TCOS_XDMCP_SERVER=$(read_cmdline_var 'xserver' "${xserver}")
  TCOS_FONT_SERVER=$(read_cmdline_var 'fontserver' "${xserver}")
  TCOS_RDESKTOP_SERVER=$(read_cmdline_var 'rdesktop' "${xserver}")
  TCOS_NFS_SERVER=$(read_cmdline_var 'nfsserver' "${xserver}")
else
  TCOS_SERVER=$(read_cmdline_var 'server' "${dhcpserver}")
  TCOS_XDMCP_SERVER=$(read_cmdline_var 'xserver' "${dhcpserver}")
  TCOS_FONT_SERVER=$(read_cmdline_var 'fontserver' "${dhcpserver}")
  TCOS_RDESKTOP_SERVER=$(read_cmdline_var 'rdesktop' "${dhcpserver}")
  TCOS_NFS_SERVER=$(read_cmdline_var 'nfsserver' "${dhcpserver}")
fi


# Setup the hostname
log_begin_msg "Setting hostname to ${hostname}"
  echo $hostname > /etc/hostname
  echo $hostname > /proc/sys/kernel/hostname
  cat <<EOF > /etc/hosts
127.0.0.1 localhost.localdomain localhost
127.0.1.1 ${hostname}
${myip} ${hostname}
${TCOS_SERVER} tcos-server
${TCOS_TFTP_SERVER} tftp-server
${TCOS_XDMCP_SERVER} xdmcp-server
${TCOS_RDESKTOP_SERVER} rdesktop-server
${TCOS_NFS_SERVER} nfs-server
${TCOS_FONT_SERVER} font-server
EOF

hostname $hostname
export HOSTNAME=$hostname
log_end_msg

# start portmap
[ -x /sbin/portmap ] && /sbin/portmap >/tmp/portmap.log 2>&1 &


exit 0