17 local _script_dir="$_readd_base/$_ip.$_maskbits"
19 # we make sure the interface is up first
20 /sbin/ip link set $_iface up || {
21 echo "Failed to bringup interface $_iface"
24 /sbin/ip addr add $_ip/$_maskbits brd + dev $_iface || {
25 echo "Failed to add $_ip/$_maskbits on dev $_iface"
29 mkdir -p $_script_dir || {
30 echo "Failed to mkdir -p $_script_dir"
39 delete_ip_from_iface()
45 local _script_dir="$_readd_base/$_ip.$_maskbits"
47 # the ip tool will delete all secondary IPs if this is the primary. To work around
48 # this _very_ annoying behaviour we have to keep a record of the secondaries and re-add
49 # them afterwards. yuck
51 if /sbin/ip addr list dev $_iface primary | grep -q "inet $_ip/$_maskbits " ; then
52 _secondaries=`/sbin/ip addr list dev $_iface secondary | grep " inet " | awk '{print $2}'`
55 /sbin/ip addr del $_ip/$_maskbits dev $_iface || _failed=1
56 [ -z "$_secondaries" ] || {
58 for _i in $_secondaries; do
59 if /sbin/ip addr list dev $_iface | grep -q "inet $_i" ; then
60 echo "kept secondary $_i on dev $_iface"
62 echo "re-adding secondary address $_i to dev $_iface"
63 /sbin/ip addr add $_i brd + dev $_iface || _failed=1
65 local _s_ip=`echo "$_i" | cut -d '/' -f1`
66 local _s_maskbits=`echo "$_i" | cut -d '/' -f2`
67 local _s_script_dir="$_readd_base/$_s_ip.$_s_maskbits"
70 for _s_script in $_s_script_dir/*; do
71 $_s_script "$_iface" "$_s_ip" "$_s_maskbits" || {
73 echo "$_s_script '$_iface' '$_s_ip' '$_s_maskbits' - failed - $ret"
76 echo "call $_s_script '$_iface' '$_s_ip' '$_s_maskbits'"
82 test -d $_script_dir && {
87 echo "Failed to del $_ip on dev $_iface"
93 setup_iface_ip_readd_script()
99 local _readd_script=$5
100 local _script_dir="$_readd_base/$_ip.$_maskbits"
102 test -x "$_readd_script" || {
103 echo "Script '$_readd_script' isn't executable"
107 local _readd_basename=`basename $_readd_script`
108 local _readd_final="$_script_dir/$_readd_basename"
110 mkdir -p $_script_dir || {
111 echo "Failed to mkdir -p $_script_dir"
115 cp -a $_readd_script $_readd_final || {
116 echo "Failed to - cp -a $_readd_script $_readd_final"
125 add_ip_to_iface $IFACE $IP $MASKBITS $READD_BASE
129 delete_ip_from_iface $IFACE $IP $MASKBITS $READD_BASE
133 setup_iface_ip_readd_script $IFACE $IP $MASKBITS $READD_BASE $READD_SCRIPT
138 echo "$0: unknown operation[$OP]"