diff options
author | Denys Vlasenko | 2017-03-27 22:32:44 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-03-27 22:44:22 +0200 |
commit | ed898ed2ddc1e3627555488671155420a32d0167 (patch) | |
tree | eee8a0aed9fd26e7aea254004efe0e15ad83c53d /networking/udhcp/d6_common.h | |
parent | 64d58aa8061c7c848cf0fd37de3ccbb8582d0fc5 (diff) | |
download | busybox-ed898ed2ddc1e3627555488671155420a32d0167.zip busybox-ed898ed2ddc1e3627555488671155420a32d0167.tar.gz |
udhcp6: fix releasing
Patch is based on work by tiggerswelt.net. They say:
"
We wanted udhcpc6 to release its IPv6-Addresses on
quit (-R-commandline-option) which turned out to generate once again
kind of garbage on the network-link.
We tracked this down to two issues:
- udhcpc6 uses a variable called "srv6_buf" to send packets to
the dhcp6-server, but this variable is never initialized correctly
and contained kind of a garbage-address
- The address of the dhcp6-server is usually a link-local-address,
that requires an interface-index when using connect() on an AF_INET6-
socket
We added an
additional parameter for ifindex to d6_send_kernel_packet() and made
d6_recv_raw_packet() to capture the address of the dhcp6-server and
forward it to its callee.
"
Three last patches together:
function old new delta
d6_read_interface - 454 +454
d6_recv_raw_packet - 283 +283
option_to_env 249 504 +255
.rodata 165226 165371 +145
send_d6_discover 195 237 +42
send_d6_select 118 159 +41
send_d6_renew 173 186 +13
send_d6_release 162 173 +11
opt_req - 10 +10
d6_send_kernel_packet 304 312 +8
opt_fqdn_req - 6 +6
d6_mcast_from_client_config_ifindex 48 51 +3
d6_find_option 63 61 -2
udhcpc6_main 2416 2411 -5
static.d6_recv_raw_packet 266 - -266
------------------------------------------------------------------------------
(add/remove: 5/1 grow/shrink: 8/2 up/down: 1271/-273) Total: 998 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/udhcp/d6_common.h')
-rw-r--r-- | networking/udhcp/d6_common.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/networking/udhcp/d6_common.h b/networking/udhcp/d6_common.h index 335a092..fcec8c1 100644 --- a/networking/udhcp/d6_common.h +++ b/networking/udhcp/d6_common.h @@ -121,7 +121,8 @@ int FAST_FUNC d6_send_raw_packet( int FAST_FUNC d6_send_kernel_packet( struct d6_packet *d6_pkt, unsigned d6_pkt_size, struct in6_addr *src_ipv6, int source_port, - struct in6_addr *dst_ipv6, int dest_port + struct in6_addr *dst_ipv6, int dest_port, + int ifindex ); #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2 |