Magellan Linux

Contents of /trunk/vzctl/magellan-add_ip.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 370 - (show annotations) (download) (as text)
Fri Oct 12 00:09:51 2007 UTC (16 years, 7 months ago) by niro
File MIME type: application/x-sh
File size: 2962 byte(s)
-removed unused SCRIPT variable
-set FAKEGATEWAY variable with a sane default

1 #!/bin/bash
2 # Copyright (C) 2000-2007 SWsoft. All rights reserved.
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 #
18 #
19 # This script configure IP alias(es) inside Magellan like VE.
20 #
21 # Parameters are passed in environment variables.
22 # Required parameters:
23 # IP_ADDR - IP address(es) to add
24 # (several addresses should be divided by space)
25 # Optional parameters:
26 # VE_STATE - state of VE; could be one of:
27 # starting | stopping | running | stopped
28 # IPDELALL - delete all old interfaces
29 #
30
31 VENET_DEV=venet0
32 IFCFG_DIR=/etc/conf.d
33 IFCFG=${IFCFG_DIR}/net.${VENET_DEV}
34 ROUTESCFG=${IFCFG_DIR}/net.routes
35 HOSTFILE=/etc/hosts
36 FAKEGATEWAY=191.255.255.1
37
38 function setup_network()
39 {
40 cat > ${IFCFG} << EOF
41 ONBOOT=yes
42 NETWORKING=static
43 IP=127.0.0.1
44 NETMASK=255.255.255.255
45 BROADCAST=0.0.0.0
46 EOF
47
48 # setup routes
49 echo "-net ${FAKEGATEWAY} netmask 255.255.255.255 dev ${VENET_DEV}" > ${ROUTESCFG}
50 echo "default gw ${FAKEGATEWAY}" >> ${ROUTESCFG}
51
52 # Set up /etc/hosts
53 if [ ! -f ${HOSTFILE} ]; then
54 echo "127.0.0.1 localhost.localdomain localhost" > $HOSTFILE
55 fi
56 }
57
58 function get_all_aliasid()
59 {
60 IFNUM=-1
61 IFNUMLIST=$(for i in $(find ${IFCFG_DIR} -name net.${VENET_DEV}:*); do echo $i | sed "s/.*${VENET_DEV}://"; done)
62 }
63
64 function get_free_aliasid()
65 {
66 local found=
67
68 [ -z "${IFNUMLIST}" ] && get_all_aliasid
69 while test -z ${found}; do
70 let IFNUM=IFNUM+1
71 echo "${IFNUMLIST}" | grep -q -E "${IFNUM}" 2>/dev/null || found=1
72 done
73 }
74
75 function create_config()
76 {
77 local ip=$1
78 local ifnum=$2
79
80 echo -e "# auto-generated configuration for ${VENET_DEV}:${ifnum}
81 ONBOOT=yes
82 NETWORKING=static
83 IP=${ip}
84 NETMASK=255.255.255.255
85 BROADCAST=0.0.0.0
86 " > ${IFCFG}:${ifnum}
87 }
88
89
90 function add_ip()
91 {
92 local ip
93 local new_ips
94
95 # In case we are starting VE
96 if [ "x${VE_STATE}" = "xstarting" ]; then
97 setup_network
98 fi
99
100 if [ "x${IPDELALL}" = "xyes" ]; then
101 rm -f ${IFCFG}
102 rm -f ${IFCFG}:[0-9]*
103 fi
104
105 for ip in ${IP_ADDR}; do
106 found=
107 if grep -e "\\<${ip}\\>" >/dev/null 2>&1 ${IFCFG}:*; then
108 continue
109 fi
110 get_free_aliasid
111 create_config ${ip} ${IFNUM}
112 done
113
114 if [ "x${VE_STATE}" = "xrunning" ]; then
115 # synchronyze config files & interfaces
116 /etc/init.d/network restart 2>/dev/null 1>/dev/null
117 fi
118 }
119
120 add_ip
121 exit 0
122 # end of script