busybox: udhcpc: replace udhcpc_no_msg_dontroute patch by upstream fix
Replace 204-udhcpc_no_msg_dontroute patch by the upstream busybox fix which removes the code which requires the server ID to be on local network Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
This commit is contained in:
parent
004fe89620
commit
c6e50075f2
3 changed files with 118 additions and 12 deletions
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=busybox
|
PKG_NAME:=busybox
|
||||||
PKG_VERSION:=1.28.4
|
PKG_VERSION:=1.28.4
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=2
|
||||||
PKG_FLAGS:=essential
|
PKG_FLAGS:=essential
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/networking/udhcp/dhcpc.c
|
|
||||||
+++ b/networking/udhcp/dhcpc.c
|
|
||||||
@@ -700,7 +700,7 @@
|
|
||||||
return udhcp_send_kernel_packet(packet,
|
|
||||||
ciaddr, CLIENT_PORT,
|
|
||||||
server, SERVER_PORT,
|
|
||||||
- /*send_flags: "to hosts only on directly connected networks" */ MSG_DONTROUTE
|
|
||||||
+ 0 /*Was MSG_DONTROUTE here. It prevented unicast renewal requests to server in different subnet*/
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return raw_bcast_from_client_config_ifindex(packet, ciaddr);
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
From 148788eb0ee96026105755cf3fd1ad3d94f49cd2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Denys Vlasenko <vda.linux@googlemail.com>
|
||||||
|
Date: Thu, 21 Jun 2018 17:36:22 +0200
|
||||||
|
Subject: [PATCH] udhcpc: remove code which requires server ID to be on local
|
||||||
|
network
|
||||||
|
|
||||||
|
This reverts "udhcpc: paranoia when using kernel UDP mode
|
||||||
|
for sending renew: server ID may be bogus".
|
||||||
|
|
||||||
|
Users complain that they do have servers behind routers
|
||||||
|
(with DHCP relays).
|
||||||
|
|
||||||
|
function old new delta
|
||||||
|
send_packet 168 166 -2
|
||||||
|
bcast_or_ucast 25 23 -2
|
||||||
|
udhcp_send_kernel_packet 301 295 -6
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-10) Total: -10 bytes
|
||||||
|
|
||||||
|
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
||||||
|
---
|
||||||
|
networking/udhcp/common.h | 4 +---
|
||||||
|
networking/udhcp/d6_dhcpc.c | 4 +---
|
||||||
|
networking/udhcp/dhcpc.c | 10 ++--------
|
||||||
|
networking/udhcp/dhcpd.c | 4 +---
|
||||||
|
networking/udhcp/packet.c | 7 +++----
|
||||||
|
5 files changed, 8 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
|
--- a/networking/udhcp/common.h
|
||||||
|
+++ b/networking/udhcp/common.h
|
||||||
|
@@ -308,9 +308,7 @@ int udhcp_send_raw_packet(struct dhcp_pa
|
||||||
|
|
||||||
|
int udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
|
||||||
|
uint32_t source_nip, int source_port,
|
||||||
|
- uint32_t dest_nip, int dest_port,
|
||||||
|
- int send_flags
|
||||||
|
-) FAST_FUNC;
|
||||||
|
+ uint32_t dest_nip, int dest_port) FAST_FUNC;
|
||||||
|
|
||||||
|
void udhcp_sp_setup(void) FAST_FUNC;
|
||||||
|
void udhcp_sp_fd_set(struct pollfd *pfds, int extra_fd) FAST_FUNC;
|
||||||
|
--- a/networking/udhcp/d6_dhcpc.c
|
||||||
|
+++ b/networking/udhcp/d6_dhcpc.c
|
||||||
|
@@ -702,15 +702,13 @@ static NOINLINE int send_d6_renew(uint32
|
||||||
|
opt_ptr = add_d6_client_options(opt_ptr);
|
||||||
|
|
||||||
|
bb_error_msg("sending %s", "renew");
|
||||||
|
- if (server_ipv6) {
|
||||||
|
+ if (server_ipv6)
|
||||||
|
return d6_send_kernel_packet(
|
||||||
|
&packet, (opt_ptr - (uint8_t*) &packet),
|
||||||
|
our_cur_ipv6, CLIENT_PORT6,
|
||||||
|
server_ipv6, SERVER_PORT6,
|
||||||
|
client_config.ifindex
|
||||||
|
- /* TODO? send_flags: MSG_DONTROUTE (see IPv4 code for reason why) */
|
||||||
|
);
|
||||||
|
- }
|
||||||
|
return d6_mcast_from_client_config_ifindex(&packet, opt_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/networking/udhcp/dhcpc.c
|
||||||
|
+++ b/networking/udhcp/dhcpc.c
|
||||||
|
@@ -693,16 +693,10 @@ static int raw_bcast_from_client_config_
|
||||||
|
|
||||||
|
static int bcast_or_ucast(struct dhcp_packet *packet, uint32_t ciaddr, uint32_t server)
|
||||||
|
{
|
||||||
|
- if (server) {
|
||||||
|
- /* Without MSG_DONTROUTE, the packet was seen routed over
|
||||||
|
- * _other interface_ if server ID is bogus (example: 1.1.1.1).
|
||||||
|
- */
|
||||||
|
+ if (server)
|
||||||
|
return udhcp_send_kernel_packet(packet,
|
||||||
|
ciaddr, CLIENT_PORT,
|
||||||
|
- server, SERVER_PORT,
|
||||||
|
- /*send_flags: "to hosts only on directly connected networks" */ MSG_DONTROUTE
|
||||||
|
- );
|
||||||
|
- }
|
||||||
|
+ server, SERVER_PORT);
|
||||||
|
return raw_bcast_from_client_config_ifindex(packet, ciaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/networking/udhcp/dhcpd.c
|
||||||
|
+++ b/networking/udhcp/dhcpd.c
|
||||||
|
@@ -588,9 +588,7 @@ static void send_packet_to_relay(struct
|
||||||
|
|
||||||
|
udhcp_send_kernel_packet(dhcp_pkt,
|
||||||
|
server_config.server_nip, SERVER_PORT,
|
||||||
|
- dhcp_pkt->gateway_nip, SERVER_PORT,
|
||||||
|
- /*send_flags:*/ 0
|
||||||
|
- );
|
||||||
|
+ dhcp_pkt->gateway_nip, SERVER_PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void send_packet(struct dhcp_packet *dhcp_pkt, int force_broadcast)
|
||||||
|
--- a/networking/udhcp/packet.c
|
||||||
|
+++ b/networking/udhcp/packet.c
|
||||||
|
@@ -189,8 +189,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru
|
||||||
|
/* Let the kernel do all the work for packet generation */
|
||||||
|
int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
|
||||||
|
uint32_t source_nip, int source_port,
|
||||||
|
- uint32_t dest_nip, int dest_port,
|
||||||
|
- int send_flags)
|
||||||
|
+ uint32_t dest_nip, int dest_port)
|
||||||
|
{
|
||||||
|
struct sockaddr_in sa;
|
||||||
|
unsigned padding;
|
||||||
|
@@ -227,8 +226,8 @@ int FAST_FUNC udhcp_send_kernel_packet(s
|
||||||
|
padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options);
|
||||||
|
if (padding > DHCP_SIZE - 300)
|
||||||
|
padding = DHCP_SIZE - 300;
|
||||||
|
- result = send(fd, dhcp_pkt, DHCP_SIZE - padding, send_flags);
|
||||||
|
- msg = "send";
|
||||||
|
+ result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding);
|
||||||
|
+ msg = "write";
|
||||||
|
ret_close:
|
||||||
|
close(fd);
|
||||||
|
if (result < 0) {
|
Loading…
Reference in a new issue