Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | Found this patch here: |
| 2 | https://lists.isc.org/pipermail/dhcp-users/2011-January/012910.html |
| 3 | |
| 4 | and made some adjustments/updates to make it work with this version. |
| 5 | Wasn't able to find that why this patch was not accepted by ISC DHCP developers. |
| 6 | |
| 7 | Upstream-Status: Pending |
| 8 | |
| 9 | Signed-off-by: Muhammad Shakeel <muhammad_shakeel@mentor.com> |
| 10 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 11 | Rebase to 4.3.4 |
| 12 | |
| 13 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> |
| 14 | --- |
| 15 | client/scripts/linux | 82 ++++++++++++++++++++++++++++------------------------ |
| 16 | 1 file changed, 45 insertions(+), 37 deletions(-) |
| 17 | |
| 18 | diff --git a/client/scripts/linux b/client/scripts/linux |
| 19 | index a02cfd9..232a0aa 100755 |
| 20 | --- a/client/scripts/linux |
| 21 | +++ b/client/scripts/linux |
| 22 | @@ -101,17 +101,11 @@ fi |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 23 | if [ x$old_broadcast_address != x ]; then |
| 24 | old_broadcast_arg="broadcast $old_broadcast_address" |
| 25 | fi |
| 26 | -if [ x$new_subnet_mask != x ]; then |
| 27 | - new_subnet_arg="netmask $new_subnet_mask" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 28 | +if [ -n "$new_subnet_mask" ]; then |
| 29 | + new_mask="/$new_subnet_mask" |
| 30 | fi |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 31 | -if [ x$old_subnet_mask != x ]; then |
| 32 | - old_subnet_arg="netmask $old_subnet_mask" |
| 33 | -fi |
| 34 | -if [ x$alias_subnet_mask != x ]; then |
| 35 | - alias_subnet_arg="netmask $alias_subnet_mask" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 36 | -fi |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 37 | -if [ x$new_interface_mtu != x ]; then |
| 38 | - mtu_arg="mtu $new_interface_mtu" |
| 39 | +if [ -n "$alias_subnet_mask" ]; then |
| 40 | + alias_mask="/$alias_subnet_mask" |
| 41 | fi |
| 42 | if [ x$IF_METRIC != x ]; then |
| 43 | metric_arg="metric $IF_METRIC" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 44 | @@ -125,9 +119,9 @@ fi |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 45 | if [ x$reason = xPREINIT ]; then |
| 46 | if [ x$alias_ip_address != x ]; then |
| 47 | # Bring down alias interface. Its routes will disappear too. |
| 48 | - ifconfig $interface:0- inet 0 |
| 49 | + ${ip} -4 addr flush dev ${interface} label ${interface}:0 |
| 50 | fi |
| 51 | - ifconfig $interface 0 up |
| 52 | + ${ip} link set dev ${interface} up |
| 53 | |
| 54 | # We need to give the kernel some time to get the interface up. |
| 55 | sleep 1 |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 56 | @@ -154,25 +148,30 @@ if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 57 | if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ |
| 58 | [ x$alias_ip_address != x$old_ip_address ]; then |
| 59 | # Possible new alias. Remove old alias. |
| 60 | - ifconfig $interface:0- inet 0 |
| 61 | + ${ip} -4 addr flush dev ${interface} label ${interface}:0 |
| 62 | fi |
| 63 | if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then |
| 64 | # IP address changed. Bringing down the interface will delete all routes, |
| 65 | # and clear the ARP cache. |
| 66 | - ifconfig $interface inet 0 down |
| 67 | + ${ip} -4 addr flush dev ${interface} label ${interface} |
| 68 | |
| 69 | fi |
| 70 | if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ |
| 71 | [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then |
| 72 | |
| 73 | - ifconfig $interface inet $new_ip_address $new_subnet_arg \ |
| 74 | - $new_broadcast_arg $mtu_arg |
| 75 | + ${ip} -4 addr add ${new_ip_address}${new_mask} ${new_broadcast_arg} \ |
| 76 | + dev ${interface} label ${interface} |
| 77 | + if [ -n "$new_interface_mtu" ]; then |
| 78 | + # set MTU |
| 79 | + ${ip} link set dev ${interface} mtu ${new_interface_mtu} |
| 80 | + fi |
| 81 | # Add a network route to the computed network address. |
| 82 | for router in $new_routers; do |
| 83 | if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then |
| 84 | - route add -host $router dev $interface |
| 85 | + ${ip} -4 route add ${router} dev $interface >/dev/null 2>&1 |
| 86 | fi |
| 87 | - route add default gw $router $metric_arg dev $interface |
| 88 | + ${ip} -4 route add default via ${router} dev ${interface} \ |
| 89 | + ${metric_arg} >/dev/null 2>&1 |
| 90 | done |
| 91 | else |
| 92 | # we haven't changed the address, have we changed other options |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 93 | @@ -180,21 +179,23 @@ if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 94 | if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then |
| 95 | # if we've changed routers delete the old and add the new. |
| 96 | for router in $old_routers; do |
| 97 | - route del default gw $router |
| 98 | + ${ip} -4 route delete default via ${router} |
| 99 | done |
| 100 | for router in $new_routers; do |
| 101 | if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then |
| 102 | - route add -host $router dev $interface |
| 103 | - fi |
| 104 | - route add default gw $router $metric_arg dev $interface |
| 105 | + ${ip} -4 route add ${router} dev $interface >/dev/null 2>&1 |
| 106 | + fi |
| 107 | + ${ip} -4 route add default via ${router} dev ${interface} \ |
| 108 | + ${metric_arg} >/dev/null 2>&1 |
| 109 | done |
| 110 | fi |
| 111 | fi |
| 112 | if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; |
| 113 | then |
| 114 | - ifconfig $interface:0- inet 0 |
| 115 | - ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg |
| 116 | - route add -host $alias_ip_address $interface:0 |
| 117 | + ${ip} -4 addr flush dev ${interface} label ${interface}:0 |
| 118 | + ${ip} -4 addr add ${alias_ip_address}${alias_mask} \ |
| 119 | + dev ${interface} label ${interface}:0 |
| 120 | + ${ip} -4 route add ${alias_ip_address} dev ${interface} >/dev/null 2>&1 |
| 121 | fi |
| 122 | make_resolv_conf |
| 123 | exit_with_hooks 0 |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 124 | @@ -204,42 +205,49 @@ if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 125 | || [ x$reason = xSTOP ]; then |
| 126 | if [ x$alias_ip_address != x ]; then |
| 127 | # Turn off alias interface. |
| 128 | - ifconfig $interface:0- inet 0 |
| 129 | + ${ip} -4 addr flush dev ${interface} label ${interface}:0 |
| 130 | fi |
| 131 | if [ x$old_ip_address != x ]; then |
| 132 | # Shut down interface, which will delete routes and clear arp cache. |
| 133 | - ifconfig $interface inet 0 down |
| 134 | + ${ip} -4 addr flush dev ${interface} label ${interface} |
| 135 | fi |
| 136 | if [ x$alias_ip_address != x ]; then |
| 137 | - ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg |
| 138 | - route add -host $alias_ip_address $interface:0 |
| 139 | + ${ip} -4 addr add ${alias_ip_address}${alias_network_arg} \ |
| 140 | + dev ${interface} label ${interface}:0 |
| 141 | + ${ip} -4 route add ${alias_ip_address} dev ${interface} >/dev/null 2>&1 |
| 142 | fi |
| 143 | exit_with_hooks 0 |
| 144 | fi |
| 145 | |
| 146 | if [ x$reason = xTIMEOUT ]; then |
| 147 | if [ x$alias_ip_address != x ]; then |
| 148 | - ifconfig $interface:0- inet 0 |
| 149 | + ${ip} -4 addr flush dev ${interface} label ${interface}:0 |
| 150 | + fi |
| 151 | + ${ip} -4 addr add ${new_ip_address}${new_mask} ${new_broadcast_arg} \ |
| 152 | + dev ${interface} label ${interface} |
| 153 | + if [ -n "$new_interface_mtu" ]; then |
| 154 | + # set MTU |
| 155 | + ip link set dev ${interface} mtu ${new_interface_mtu} |
| 156 | fi |
| 157 | - ifconfig $interface inet $new_ip_address $new_subnet_arg \ |
| 158 | - $new_broadcast_arg $mtu_arg |
| 159 | set $new_routers |
| 160 | if ping -q -c 1 $1; then |
| 161 | if [ x$new_ip_address != x$alias_ip_address ] && \ |
| 162 | [ x$alias_ip_address != x ]; then |
| 163 | - ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg |
| 164 | - route add -host $alias_ip_address dev $interface:0 |
| 165 | + ${ip} -4 addr add ${alias_ip_address}${alias_mask} \ |
| 166 | + dev ${interface} label ${interface}:0 |
| 167 | + ${ip} -4 route add ${alias_ip_address} dev ${interface} >/dev/null 2>&1 |
| 168 | fi |
| 169 | for router in $new_routers; do |
| 170 | if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then |
| 171 | - route add -host $router dev $interface |
| 172 | + ${ip} -4 route add ${router} dev $interface >/dev/null 2>&1 |
| 173 | fi |
| 174 | - route add default gw $router $metric_arg dev $interface |
| 175 | + ${ip} -4 route add default via ${router} dev ${interface} \ |
| 176 | + ${metric_arg} >/dev/null 2>&1 |
| 177 | done |
| 178 | make_resolv_conf |
| 179 | exit_with_hooks 0 |
| 180 | fi |
| 181 | - ifconfig $interface inet 0 down |
| 182 | + ${ip} -4 addr flush dev ${interface} |
| 183 | exit_with_hooks 1 |
| 184 | fi |
| 185 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 186 | -- |
| 187 | 2.8.1 |
| 188 | |