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 test -x "$_s_script" || {
74 echo "call $_s_script '$_iface' '$_s_ip' '$_s_maskbits'"
75 $_s_script "$_iface" "$_s_ip" "$_s_maskbits" || {
77 echo "$_s_script '$_iface' '$_s_ip' '$_s_maskbits' - failed - $ret"
85 test -d $_script_dir && {
90 echo "Failed to del $_ip on dev $_iface"
96 setup_iface_ip_readd_script()
102 local _readd_script=$5
103 local _script_dir="$_readd_base/$_ip.$_maskbits"
105 test -x "$_readd_script" || {
106 echo "Script '$_readd_script' isn't executable"
110 local _readd_basename=`basename $_readd_script`
111 local _readd_final="$_script_dir/$_readd_basename"
113 mkdir -p $_script_dir || {
114 echo "Failed to mkdir -p $_script_dir"
118 cp -a $_readd_script $_readd_final || {
119 echo "Failed to - cp -a $_readd_script $_readd_final"
128 add_ip_to_iface $IFACE $IP $MASKBITS $READD_BASE
132 delete_ip_from_iface $IFACE $IP $MASKBITS $READD_BASE
136 setup_iface_ip_readd_script $IFACE $IP $MASKBITS $READD_BASE $READD_SCRIPT
141 echo "$0: unknown operation[$OP]"