Hi Pacien, On Thu, 13 Apr 2023 at 12:57, pacien <dzfkct.busybo...@pacien.net> wrote: > > From: pacien <pacien.trangir...@pacien.net> > > This adds a command line option (-K) to set the (kernel) packet > priority. The option is part of "FEATURE_UDHCPC_SK_PRIO". > > This makes it straightforward to set some VLAN priority for DHCP > requests through an egress QoS map. Packet matching for firewall > or scheduler marking is otherwise broken due to the use of raw > packets. > > (Such priority tag is a hard requirement for some ISPs, such as Orange > in France). > > Enabling this feature costs 264 octets according to bloatcheck. > > Co-authored-by: Clément Péron <peron.c...@gmail.com> > Signed-off-by: Pacien TRAN-GIRARD <pacien.trangir...@pacien.net> > --- > Differences from Pacien's v1 and Clément's v2: > * made it clear that we're only talking about the kernel packet priority > (CoS or SKB were ambiguous or unclear) > > Differences from Clément's v2: > * renamed the flag to -K to match the new terminology > * moved sk_prio to client_data, passed as params instead of a global > * used the same error handling as in the send_packet functions > > networking/udhcp/Config.src | 10 ++++++++++ > networking/udhcp/common.h | 6 ++++-- > networking/udhcp/d6_common.h | 2 ++ > networking/udhcp/d6_dhcpc.c | 26 +++++++++++++++++++------- > networking/udhcp/d6_packet.c | 21 +++++++++++++++++++-- > networking/udhcp/dhcpc.c | 29 ++++++++++++++++++++--------- > networking/udhcp/dhcpc.h | 1 + > networking/udhcp/dhcpd.c | 6 ++++-- > networking/udhcp/packet.c | 21 +++++++++++++++++++-- > 9 files changed, 98 insertions(+), 24 deletions(-) > > diff --git a/networking/udhcp/Config.src b/networking/udhcp/Config.src > index 7ba7f48fc..731cf12fa 100644 > --- a/networking/udhcp/Config.src > +++ b/networking/udhcp/Config.src > @@ -176,3 +176,13 @@ config FEATURE_UDHCP_8021Q > help > If selected, both client and server will support passing of VLAN > ID and priority via options 132 and 133 as per 802.1Q. > + > +config FEATURE_UDHCPC_SK_PRIO > + bool "Enable '-K' option for udhcpc" > + default y > + depends on UDHCPC || UDHCPC6 > + help > + If selected, enables -K option to set the kernel priority of DHCP > + packets. Useful together with some egress QoS mapping to send > + requests with a specific VLAN priority tag, as required by some > + ISPs. > diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h > index 49a0b593d..30ee68375 100644 > --- a/networking/udhcp/common.h > +++ b/networking/udhcp/common.h > @@ -359,12 +359,14 @@ int udhcp_recv_kernel_packet(struct dhcp_packet > *packet, int fd) FAST_FUNC; > int udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, > uint32_t source_nip, int source_port, > uint32_t dest_nip, int dest_port, const uint8_t *dest_arp, > - int ifindex) FAST_FUNC; > + int ifindex > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio)) FAST_FUNC; > > int udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt, > uint32_t source_nip, int source_port, > uint32_t dest_nip, int dest_port, > - const char *ifname) FAST_FUNC; > + const char *ifname > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio)) FAST_FUNC; > > void udhcp_sp_setup(void) FAST_FUNC; > void udhcp_sp_fd_set(struct pollfd *pfds, int extra_fd) FAST_FUNC; > diff --git a/networking/udhcp/d6_common.h b/networking/udhcp/d6_common.h > index 3cbfbb89e..05a5dc2b4 100644 > --- a/networking/udhcp/d6_common.h > +++ b/networking/udhcp/d6_common.h > @@ -180,12 +180,14 @@ int FAST_FUNC > d6_send_raw_packet_from_client_data_ifindex( > 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, const uint8_t > *dest_arp > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio) > ); > > int FAST_FUNC d6_send_kernel_packet_from_client_data_ifindex( > 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 > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio) > ); > > #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2 > diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c > index cdd06188e..173aa2914 100644 > --- a/networking/udhcp/d6_dhcpc.c > +++ b/networking/udhcp/d6_dhcpc.c > @@ -127,6 +127,7 @@ static const char udhcpc6_longopts[] ALIGN1 = > USE_FOR_MMU( > "background\0" No_argument "b" > ) > + IF_FEATURE_UDHCPC_SK_PRIO("sk-priority\0" Required_argument > "K") > /// IF_FEATURE_UDHCPC_ARPING("arping\0" No_argument "a") > IF_FEATURE_UDHCP_PORT("client-port\0" Required_argument "P") > ; > @@ -152,12 +153,14 @@ enum { > OPT_d = 1 << 16, > /* The rest has variable bit positions, need to be clever */ > OPTBIT_d = 16, > - USE_FOR_MMU( OPTBIT_b,) > - ///IF_FEATURE_UDHCPC_ARPING(OPTBIT_a,) > - IF_FEATURE_UDHCP_PORT( OPTBIT_P,) > - USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,) > - ///IF_FEATURE_UDHCPC_ARPING(OPT_a = 1 << OPTBIT_a,) > - IF_FEATURE_UDHCP_PORT( OPT_P = 1 << OPTBIT_P,) > + USE_FOR_MMU( OPTBIT_b,) > + IF_FEATURE_UDHCPC_SK_PRIO(OPTBIT_K,) > + ///IF_FEATURE_UDHCPC_ARPING( OPTBIT_a,) > + IF_FEATURE_UDHCP_PORT( OPTBIT_P,) > + USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,) > + IF_FEATURE_UDHCPC_SK_PRIO(OPT_K = 1 << OPTBIT_K,) > + ///IF_FEATURE_UDHCPC_ARPING( OPT_a = 1 << OPTBIT_a,) > + IF_FEATURE_UDHCP_PORT( OPT_P = 1 << OPTBIT_P,) > }; > > #if ENABLE_FEATURE_UDHCPC6_RFC4704 > @@ -561,6 +564,7 @@ static int d6_mcast_from_client_data_ifindex(struct > d6_packet *packet, uint8_t * > packet, (end - (uint8_t*) packet), > /*src*/ &client6_data.ll_ip6, CLIENT_PORT6, > /*dst*/ (struct in6_addr*)FF02__1_2, SERVER_PORT6, > MAC_DHCP6MCAST_ADDR > + IF_FEATURE_UDHCPC_SK_PRIO(, client_data.sk_prio) > ); > } > > @@ -866,6 +870,7 @@ static NOINLINE int send_d6_renew(struct in6_addr > *server_ipv6, struct in6_addr > &packet, (opt_ptr - (uint8_t*) &packet), > our_cur_ipv6, CLIENT_PORT6, > server_ipv6, SERVER_PORT6 > + IF_FEATURE_UDHCPC_SK_PRIO(, client_data.sk_prio) > ); > return d6_mcast_from_client_data_ifindex(&packet, opt_ptr); > } > @@ -899,6 +904,7 @@ int send_d6_release(struct in6_addr *server_ipv6, struct > in6_addr *our_cur_ipv6) > &packet, (opt_ptr - (uint8_t*) &packet), > our_cur_ipv6, CLIENT_PORT6, > server_ipv6, SERVER_PORT6 > + IF_FEATURE_UDHCPC_SK_PRIO(, client_data.sk_prio) > ); > } > > @@ -1129,7 +1135,7 @@ static void client_background(void) > //usage:# define IF_UDHCP_VERBOSE(...) > //usage:#endif > //usage:#define udhcpc6_trivial_usage > -//usage: "[-fbq"IF_UDHCP_VERBOSE("v")"R] [-t N] [-T SEC] [-A SEC|-n] > [-i IFACE] [-s PROG]\n" > +//usage: "[-fbq"IF_UDHCP_VERBOSE("v")"R]"IF_FEATURE_UDHCPC_SK_PRIO(" > [-K PRIO]")" [-t N] [-T SEC] [-A SEC|-n] [-i IFACE] [-s PROG]\n" > //usage: " [-p PIDFILE]"IF_FEATURE_UDHCP_PORT(" [-P PORT]")" > [-ldo] [-r IPv6] [-x OPT:VAL]... [-O OPT]..." > //usage:#define udhcpc6_full_usage "\n" > //usage: "\n -i IFACE Interface to use (default > "CONFIG_UDHCPC_DEFAULT_INTERFACE")" > @@ -1150,6 +1156,9 @@ static void client_background(void) > //usage: IF_FEATURE_UDHCP_PORT( > //usage: "\n -P PORT Use PORT (default 546)" > //usage: ) > +//usage: IF_FEATURE_UDHCPC_SK_PRIO( > +//usage: "\n -K PRIO Set kernel packet priority (default > 0)" > +//usage: ) > ////usage: IF_FEATURE_UDHCPC_ARPING( > ////usage: "\n -a Use arping to validate offered > address" > ////usage: ) > @@ -1199,6 +1208,7 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv) > /* Default options */ > IF_FEATURE_UDHCP_PORT(SERVER_PORT6 = 547;) > IF_FEATURE_UDHCP_PORT(CLIENT_PORT6 = 546;) > + IF_FEATURE_UDHCPC_SK_PRIO(client_data.sk_prio = 0;) > client_data.interface = CONFIG_UDHCPC_DEFAULT_INTERFACE; > client_data.script = CONFIG_UDHCPC6_DEFAULT_SCRIPT; > client_data.sockfd = -1; > @@ -1212,6 +1222,7 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv) > /* O,x: list; -T,-t,-A take numeric param */ > "i:np:qRr:s:T:+t:+SA:+O:*ox:*fld" > USE_FOR_MMU("b") > + IF_FEATURE_UDHCPC_SK_PRIO("K:+") > ///IF_FEATURE_UDHCPC_ARPING("a") > IF_FEATURE_UDHCP_PORT("P:") > "v" > @@ -1222,6 +1233,7 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv) > , &discover_timeout, &discover_retries, &tryagain_timeout /* > T,t,A */ > , &list_O > , &list_x > + IF_FEATURE_UDHCPC_SK_PRIO(, &client_data.sk_prio) > IF_FEATURE_UDHCP_PORT(, &str_P) > IF_UDHCP_VERBOSE(, &dhcp_verbose) > ); > diff --git a/networking/udhcp/d6_packet.c b/networking/udhcp/d6_packet.c > index 142de9b43..501497154 100644 > --- a/networking/udhcp/d6_packet.c > +++ b/networking/udhcp/d6_packet.c > @@ -54,7 +54,8 @@ int FAST_FUNC d6_recv_kernel_packet(struct in6_addr > *peer_ipv6 UNUSED_PARAM, > int FAST_FUNC d6_send_raw_packet_from_client_data_ifindex( > 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, const uint8_t > *dest_arp) > + struct in6_addr *dst_ipv6, int dest_port, const uint8_t > *dest_arp > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio)) > { > struct sockaddr_ll dest_sll; > struct ip6_udp_d6_packet packet; > @@ -68,6 +69,13 @@ int FAST_FUNC d6_send_raw_packet_from_client_data_ifindex( > goto ret_msg; > } > > +#if ENABLE_FEATURE_UDHCPC_SK_PRIO > + if (setsockopt_SOL_SOCKET_int(fd, SO_PRIORITY, sk_prio) < 0) {
One difference is that it will call setsockopt even when sk_prio is not set and default to '0'. I don't know if this can have an impact, or maybe we should default sk_prio to -1 and only call setsockopt_SOL_SOCKET_int() when it's >= 0 Regards, Clement > + msg = "setsockopt(%s)"; > + goto ret_close; > + } > +#endif > + > memset(&dest_sll, 0, sizeof(dest_sll)); > memset(&packet, 0, offsetof(struct ip6_udp_d6_packet, data)); > packet.data = *d6_pkt; /* struct copy */ > @@ -139,7 +147,8 @@ int FAST_FUNC d6_send_raw_packet_from_client_data_ifindex( > int FAST_FUNC d6_send_kernel_packet_from_client_data_ifindex( > 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 > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio)) > { > struct sockaddr_in6 sa; > int fd; > @@ -151,6 +160,14 @@ int FAST_FUNC > d6_send_kernel_packet_from_client_data_ifindex( > msg = "socket(%s)"; > goto ret_msg; > } > + > +#if ENABLE_FEATURE_UDHCPC_SK_PRIO > + if (setsockopt_SOL_SOCKET_int(fd, SO_PRIORITY, sk_prio) < 0) { > + msg = "setsockopt(%s)"; > + goto ret_close; > + } > +#endif > + > setsockopt_reuseaddr(fd); > > memset(&sa, 0, sizeof(sa)); > diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c > index c757fb37c..8108f6856 100644 > --- a/networking/udhcp/dhcpc.c > +++ b/networking/udhcp/dhcpc.c > @@ -75,6 +75,7 @@ static const char udhcpc_longopts[] ALIGN1 = > "background\0" No_argument "b" > ) > "broadcast\0" No_argument "B" > + IF_FEATURE_UDHCPC_SK_PRIO("sk-priority\0" Required_argument > "K") > IF_FEATURE_UDHCPC_ARPING("arping\0" Optional_argument "a") > IF_FEATURE_UDHCP_PORT("client-port\0" Required_argument "P") > ; > @@ -102,12 +103,14 @@ enum { > OPT_B = 1 << 18, > /* The rest has variable bit positions, need to be clever */ > OPTBIT_B = 18, > - USE_FOR_MMU( OPTBIT_b,) > - IF_FEATURE_UDHCPC_ARPING(OPTBIT_a,) > - IF_FEATURE_UDHCP_PORT( OPTBIT_P,) > - USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,) > - IF_FEATURE_UDHCPC_ARPING(OPT_a = 1 << OPTBIT_a,) > - IF_FEATURE_UDHCP_PORT( OPT_P = 1 << OPTBIT_P,) > + USE_FOR_MMU( OPTBIT_b,) > + IF_FEATURE_UDHCPC_SK_PRIO(OPTBIT_K,) > + IF_FEATURE_UDHCPC_ARPING( OPTBIT_a,) > + IF_FEATURE_UDHCP_PORT( OPTBIT_P,) > + USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,) > + IF_FEATURE_UDHCPC_SK_PRIO(OPT_K = 1 << OPTBIT_K,) > + IF_FEATURE_UDHCPC_ARPING( OPT_a = 1 << OPTBIT_a,) > + IF_FEATURE_UDHCP_PORT( OPT_P = 1 << OPTBIT_P,) > }; > > > @@ -704,7 +707,8 @@ static int raw_bcast_from_client_data_ifindex(struct > dhcp_packet *packet, uint32 > return udhcp_send_raw_packet(packet, > /*src*/ src_nip, CLIENT_PORT, > /*dst*/ INADDR_BROADCAST, SERVER_PORT, MAC_BCAST_ADDR, > - client_data.ifindex); > + client_data.ifindex > + IF_FEATURE_UDHCPC_SK_PRIO(, client_data.sk_prio)); > } > > static int bcast_or_ucast(struct dhcp_packet *packet, uint32_t ciaddr, > uint32_t server) > @@ -713,7 +717,8 @@ static int bcast_or_ucast(struct dhcp_packet *packet, > uint32_t ciaddr, uint32_t > return udhcp_send_kernel_packet(packet, > ciaddr, CLIENT_PORT, > server, SERVER_PORT, > - client_data.interface); > + client_data.interface > + IF_FEATURE_UDHCPC_SK_PRIO(, client_data.sk_prio)); > return raw_bcast_from_client_data_ifindex(packet, ciaddr); > } > > @@ -1161,7 +1166,7 @@ static void client_background(void) > //usage:# define IF_UDHCP_VERBOSE(...) > //usage:#endif > //usage:#define udhcpc_trivial_usage > -//usage: "[-fbq"IF_UDHCP_VERBOSE("v")"RB]"IF_FEATURE_UDHCPC_ARPING(" > [-a[MSEC]]")" [-t N] [-T SEC] [-A SEC|-n]\n" > +//usage: "[-fbq"IF_UDHCP_VERBOSE("v")"RB]"IF_FEATURE_UDHCPC_SK_PRIO(" > [-K PRIO]")IF_FEATURE_UDHCPC_ARPING(" [-a[MSEC]]")" [-t N] [-T SEC] [-A > SEC|-n]\n" > //usage: " [-i IFACE]"IF_FEATURE_UDHCP_PORT(" [-P PORT]")" [-s > PROG] [-p PIDFILE]\n" > //usage: " [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... > [-O OPT]..." > //usage:#define udhcpc_full_usage "\n" > @@ -1183,6 +1188,9 @@ static void client_background(void) > //usage: "\n -R Release IP on exit" > //usage: "\n -f Run in foreground" > //usage: "\n -S Log to syslog too" > +//usage: IF_FEATURE_UDHCPC_SK_PRIO( > +//usage: "\n -K PRIO Set kernel packet priority (default > 0)" > +//usage: ) > //usage: IF_FEATURE_UDHCPC_ARPING( > //usage: "\n -a[MSEC] Validate offered address with ARP > ping" > //usage: ) > @@ -1232,6 +1240,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) > /* Default options */ > IF_FEATURE_UDHCP_PORT(SERVER_PORT = 67;) > IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;) > + IF_FEATURE_UDHCPC_SK_PRIO(client_data.sk_prio = 0;) > client_data.interface = CONFIG_UDHCPC_DEFAULT_INTERFACE; > client_data.script = CONFIG_UDHCPC_DEFAULT_SCRIPT; > client_data.sockfd = -1; > @@ -1246,6 +1255,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) > /* O,x: list; -T,-t,-A take numeric param */ > "CV:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB" > USE_FOR_MMU("b") > + IF_FEATURE_UDHCPC_SK_PRIO("K:+") > IF_FEATURE_UDHCPC_ARPING("a::") > IF_FEATURE_UDHCP_PORT("P:") > "v" > @@ -1258,6 +1268,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) > , &discover_timeout, &discover_retries, &tryagain_timeout /* > T,t,A */ > , &list_O > , &list_x > + IF_FEATURE_UDHCPC_SK_PRIO(, &client_data.sk_prio) > IF_FEATURE_UDHCPC_ARPING(, &str_a) > IF_FEATURE_UDHCP_PORT(, &str_P) > IF_UDHCP_VERBOSE(, &dhcp_verbose) > diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h > index 19b054b32..733491953 100644 > --- a/networking/udhcp/dhcpc.h > +++ b/networking/udhcp/dhcpc.h > @@ -9,6 +9,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN > > struct client_data_t { > uint8_t client_mac[6]; /* Our mac address */ > + IF_FEATURE_UDHCPC_SK_PRIO(int sk_prio;) > IF_FEATURE_UDHCP_PORT(uint16_t port;) > int ifindex; /* Index number of the interface to > use */ > uint32_t xid; > diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c > index 66750e2e6..814b791b0 100644 > --- a/networking/udhcp/dhcpd.c > +++ b/networking/udhcp/dhcpd.c > @@ -603,7 +603,8 @@ static void send_packet_to_client(struct dhcp_packet > *dhcp_pkt, int force_broadc > udhcp_send_raw_packet(dhcp_pkt, > /*src*/ server_data.server_nip, SERVER_PORT, > /*dst*/ ciaddr, CLIENT_PORT, chaddr, > - server_data.ifindex); > + server_data.ifindex > + IF_FEATURE_UDHCPC_SK_PRIO(, 0)); > } > > /* Send a packet to gateway_nip using the kernel ip stack */ > @@ -618,7 +619,8 @@ static void send_packet_to_relay(struct dhcp_packet > *dhcp_pkt) > * even those which are clients' requests and would normally > * (i.e. without relay) use CLIENT_PORT. See RFC 1542. > */ > - server_data.interface); > + server_data.interface > + IF_FEATURE_UDHCPC_SK_PRIO(, 0)); > } > > static void send_packet(struct dhcp_packet *dhcp_pkt, int force_broadcast) > diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c > index 529978189..9cd2beafe 100644 > --- a/networking/udhcp/packet.c > +++ b/networking/udhcp/packet.c > @@ -106,7 +106,8 @@ int FAST_FUNC udhcp_recv_kernel_packet(struct dhcp_packet > *packet, int fd) > int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt, > uint32_t source_nip, int source_port, > uint32_t dest_nip, int dest_port, const uint8_t *dest_arp, > - int ifindex) > + int ifindex > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio)) > { > struct sockaddr_ll dest_sll; > struct ip_udp_dhcp_packet packet; > @@ -121,6 +122,13 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet > *dhcp_pkt, > goto ret_msg; > } > > +#if ENABLE_FEATURE_UDHCPC_SK_PRIO > + if (setsockopt_SOL_SOCKET_int(fd, SO_PRIORITY, sk_prio) < 0) { > + msg = "setsockopt(%s)"; > + goto ret_close; > + } > +#endif > + > memset(&dest_sll, 0, sizeof(dest_sll)); > memset(&packet, 0, offsetof(struct ip_udp_dhcp_packet, data)); > packet.data = *dhcp_pkt; /* struct copy */ > @@ -192,7 +200,8 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet > *dhcp_pkt, > 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, > - const char *ifname) > + const char *ifname > + IF_FEATURE_UDHCPC_SK_PRIO(, int sk_prio)) > { > struct sockaddr_in sa; > unsigned padding; > @@ -205,6 +214,14 @@ int FAST_FUNC udhcp_send_kernel_packet(struct > dhcp_packet *dhcp_pkt, > msg = "socket(%s)"; > goto ret_msg; > } > + > +#if ENABLE_FEATURE_UDHCPC_SK_PRIO > + if (setsockopt_SOL_SOCKET_int(fd, SO_PRIORITY, sk_prio) < 0) { > + msg = "setsockopt(%s)"; > + goto ret_close; > + } > +#endif > + > setsockopt_reuseaddr(fd); > > /* If interface carrier goes down, unless we > -- > 2.38.4 > _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox