* [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff
@ 2016-09-28 6:57 Maciej Żenczykowski
2016-09-28 7:42 ` Hannes Frederic Sowa
2016-09-30 5:54 ` David Miller
0 siblings, 2 replies; 7+ messages in thread
From: Maciej Żenczykowski @ 2016-09-28 6:57 UTC (permalink / raw)
To: Maciej Żenczykowski, David S . Miller
Cc: netdev, Erik Kline, Lorenzo Colitti, Hannes Frederic Sowa,
Hideaki Yoshifuji
From: Maciej Żenczykowski <maze@google.com>
This implements:
https://tools.ietf.org/html/rfc7559
Backoff is performed according to RFC3315 section 14:
https://tools.ietf.org/html/rfc3315#section-14
We allow setting /proc/sys/net/ipv6/conf/*/router_solicitations
to a negative value meaning an unlimited number of retransmits,
and we make this the new default (inline with the RFC).
We also add a new setting:
/proc/sys/net/ipv6/conf/*/router_solicitation_max_interval
defaulting to 1 hour (per RFC recommendation).
Signed-off-by: Maciej Żenczykowski <maze@google.com>
---
include/linux/ipv6.h | 1 +
include/net/addrconf.h | 3 ++-
include/net/if_inet6.h | 1 +
include/uapi/linux/ipv6.h | 1 +
net/ipv6/addrconf.c | 51 ++++++++++++++++++++++++++++++++++++++++-------
5 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index c6dbcd84a2c7..7e9a789be5e0 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -18,6 +18,7 @@ struct ipv6_devconf {
__s32 dad_transmits;
__s32 rtr_solicits;
__s32 rtr_solicit_interval;
+ __s32 rtr_solicit_max_interval;
__s32 rtr_solicit_delay;
__s32 force_mld_version;
__s32 mldv1_unsolicited_report_interval;
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 9826d3a9464c..f2d072787947 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -1,8 +1,9 @@
#ifndef _ADDRCONF_H
#define _ADDRCONF_H
-#define MAX_RTR_SOLICITATIONS 3
+#define MAX_RTR_SOLICITATIONS -1 /* unlimited */
#define RTR_SOLICITATION_INTERVAL (4*HZ)
+#define RTR_SOLICITATION_MAX_INTERVAL (3600*HZ) /* 1 hour */
#define MIN_VALID_LIFETIME (2*3600) /* 2 hours */
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index 1c8b6820b694..515352c6280a 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -201,6 +201,7 @@ struct inet6_dev {
struct ipv6_devstat stats;
struct timer_list rs_timer;
+ __s32 rs_interval; /* in jiffies */
__u8 rs_probes;
__u8 addr_gen_mode;
diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h
index 395876060f50..8c2772340c3f 100644
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
@@ -177,6 +177,7 @@ enum {
DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
DEVCONF_DROP_UNSOLICITED_NA,
DEVCONF_KEEP_ADDR_ON_DOWN,
+ DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
DEVCONF_MAX
};
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 2f1f5d439788..49bee9bc5ff3 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -112,6 +112,27 @@ static inline u32 cstamp_delta(unsigned long cstamp)
return (cstamp - INITIAL_JIFFIES) * 100UL / HZ;
}
+static inline s32 rfc3315_s14_backoff_init(s32 irt)
+{
+ /* multiply 'initial retransmission time' by 0.9 .. 1.1 */
+ u64 tmp = (900000 + prandom_u32() % 200001) * (u64)irt;
+ do_div(tmp, 1000000);
+ return (s32)tmp;
+}
+
+static inline s32 rfc3315_s14_backoff_update(s32 rt, s32 mrt)
+{
+ /* multiply 'retransmission timeout' by 1.9 .. 2.1 */
+ u64 tmp = (1900000 + prandom_u32() % 200001) * (u64)rt;
+ do_div(tmp, 1000000);
+ if ((s32)tmp > mrt) {
+ /* multiply 'maximum retransmission time' by 0.9 .. 1.1 */
+ tmp = (900000 + prandom_u32() % 200001) * (u64)mrt;
+ do_div(tmp, 1000000);
+ }
+ return (s32)tmp;
+}
+
#ifdef CONFIG_SYSCTL
static int addrconf_sysctl_register(struct inet6_dev *idev);
static void addrconf_sysctl_unregister(struct inet6_dev *idev);
@@ -187,6 +208,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
.dad_transmits = 1,
.rtr_solicits = MAX_RTR_SOLICITATIONS,
.rtr_solicit_interval = RTR_SOLICITATION_INTERVAL,
+ .rtr_solicit_max_interval = RTR_SOLICITATION_MAX_INTERVAL,
.rtr_solicit_delay = MAX_RTR_SOLICITATION_DELAY,
.use_tempaddr = 0,
.temp_valid_lft = TEMP_VALID_LIFETIME,
@@ -232,6 +254,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
.dad_transmits = 1,
.rtr_solicits = MAX_RTR_SOLICITATIONS,
.rtr_solicit_interval = RTR_SOLICITATION_INTERVAL,
+ .rtr_solicit_max_interval = RTR_SOLICITATION_MAX_INTERVAL,
.rtr_solicit_delay = MAX_RTR_SOLICITATION_DELAY,
.use_tempaddr = 0,
.temp_valid_lft = TEMP_VALID_LIFETIME,
@@ -3687,7 +3710,7 @@ static void addrconf_rs_timer(unsigned long data)
if (idev->if_flags & IF_RA_RCVD)
goto out;
- if (idev->rs_probes++ < idev->cnf.rtr_solicits) {
+ if (idev->rs_probes++ < idev->cnf.rtr_solicits || idev->cnf.rtr_solicits < 0) {
write_unlock(&idev->lock);
if (!ipv6_get_lladdr(dev, &lladdr, IFA_F_TENTATIVE))
ndisc_send_rs(dev, &lladdr,
@@ -3696,11 +3719,13 @@ static void addrconf_rs_timer(unsigned long data)
goto put;
write_lock(&idev->lock);
+ idev->rs_interval = rfc3315_s14_backoff_update(
+ idev->rs_interval, idev->cnf.rtr_solicit_max_interval);
/* The wait after the last probe can be shorter */
addrconf_mod_rs_timer(idev, (idev->rs_probes ==
idev->cnf.rtr_solicits) ?
idev->cnf.rtr_solicit_delay :
- idev->cnf.rtr_solicit_interval);
+ idev->rs_interval);
} else {
/*
* Note: we do not support deprecated "all on-link"
@@ -3949,7 +3974,7 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
send_mld = ifp->scope == IFA_LINK && ipv6_lonely_lladdr(ifp);
send_rs = send_mld &&
ipv6_accept_ra(ifp->idev) &&
- ifp->idev->cnf.rtr_solicits > 0 &&
+ ifp->idev->cnf.rtr_solicits != 0 &&
(dev->flags&IFF_LOOPBACK) == 0;
read_unlock_bh(&ifp->idev->lock);
@@ -3971,10 +3996,11 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
write_lock_bh(&ifp->idev->lock);
spin_lock(&ifp->lock);
+ ifp->idev->rs_interval = rfc3315_s14_backoff_init(
+ ifp->idev->cnf.rtr_solicit_interval);
ifp->idev->rs_probes = 1;
ifp->idev->if_flags |= IF_RS_SENT;
- addrconf_mod_rs_timer(ifp->idev,
- ifp->idev->cnf.rtr_solicit_interval);
+ addrconf_mod_rs_timer(ifp->idev, ifp->idev->rs_interval);
spin_unlock(&ifp->lock);
write_unlock_bh(&ifp->idev->lock);
}
@@ -4891,6 +4917,8 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
array[DEVCONF_RTR_SOLICITS] = cnf->rtr_solicits;
array[DEVCONF_RTR_SOLICIT_INTERVAL] =
jiffies_to_msecs(cnf->rtr_solicit_interval);
+ array[DEVCONF_RTR_SOLICIT_MAX_INTERVAL] =
+ jiffies_to_msecs(cnf->rtr_solicit_max_interval);
array[DEVCONF_RTR_SOLICIT_DELAY] =
jiffies_to_msecs(cnf->rtr_solicit_delay);
array[DEVCONF_FORCE_MLD_VERSION] = cnf->force_mld_version;
@@ -5099,7 +5127,7 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token)
return -EINVAL;
if (!ipv6_accept_ra(idev))
return -EINVAL;
- if (idev->cnf.rtr_solicits <= 0)
+ if (idev->cnf.rtr_solicits == 0)
return -EINVAL;
write_lock_bh(&idev->lock);
@@ -5128,8 +5156,10 @@ update_lft:
if (update_rs) {
idev->if_flags |= IF_RS_SENT;
+ idev->rs_interval = rfc3315_s14_backoff_init(
+ idev->cnf.rtr_solicit_interval);
idev->rs_probes = 1;
- addrconf_mod_rs_timer(idev, idev->cnf.rtr_solicit_interval);
+ addrconf_mod_rs_timer(idev, idev->rs_interval);
}
/* Well, that's kinda nasty ... */
@@ -5778,6 +5808,13 @@ static const struct ctl_table addrconf_sysctl[] = {
.proc_handler = proc_dointvec_jiffies,
},
{
+ .procname = "router_solicitation_max_interval",
+ .data = &ipv6_devconf.rtr_solicit_max_interval,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec_jiffies,
+ },
+ {
.procname = "router_solicitation_delay",
.data = &ipv6_devconf.rtr_solicit_delay,
.maxlen = sizeof(int),
--
2.8.0.rc3.226.g39d4020
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff
2016-09-28 6:57 [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff Maciej Żenczykowski
@ 2016-09-28 7:42 ` Hannes Frederic Sowa
2016-09-28 7:46 ` Maciej Żenczykowski
2016-09-30 5:54 ` David Miller
1 sibling, 1 reply; 7+ messages in thread
From: Hannes Frederic Sowa @ 2016-09-28 7:42 UTC (permalink / raw)
To: Maciej Żenczykowski, Maciej Żenczykowski,
David S . Miller
Cc: netdev, Erik Kline, Lorenzo Colitti, Hideaki Yoshifuji
Hello,
On Wed, Sep 28, 2016, at 08:57, Maciej Żenczykowski wrote:
> From: Maciej Żenczykowski <maze@google.com>
>
> This implements:
> https://tools.ietf.org/html/rfc7559
>
> Backoff is performed according to RFC3315 section 14:
> https://tools.ietf.org/html/rfc3315#section-14
>
> We allow setting /proc/sys/net/ipv6/conf/*/router_solicitations
> to a negative value meaning an unlimited number of retransmits,
> and we make this the new default (inline with the RFC).
>
> We also add a new setting:
> /proc/sys/net/ipv6/conf/*/router_solicitation_max_interval
> defaulting to 1 hour (per RFC recommendation).
>
> Signed-off-by: Maciej Żenczykowski <maze@google.com>
> ---
> include/linux/ipv6.h | 1 +
> include/net/addrconf.h | 3 ++-
> include/net/if_inet6.h | 1 +
> include/uapi/linux/ipv6.h | 1 +
> net/ipv6/addrconf.c | 51
> ++++++++++++++++++++++++++++++++++++++++-------
> 5 files changed, 49 insertions(+), 8 deletions(-)
>
> diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
> index c6dbcd84a2c7..7e9a789be5e0 100644
> --- a/include/linux/ipv6.h
> +++ b/include/linux/ipv6.h
> @@ -18,6 +18,7 @@ struct ipv6_devconf {
> __s32 dad_transmits;
> __s32 rtr_solicits;
> __s32 rtr_solicit_interval;
> + __s32 rtr_solicit_max_interval;
> __s32 rtr_solicit_delay;
> __s32 force_mld_version;
> __s32 mldv1_unsolicited_report_interval;
> diff --git a/include/net/addrconf.h b/include/net/addrconf.h
> index 9826d3a9464c..f2d072787947 100644
> --- a/include/net/addrconf.h
> +++ b/include/net/addrconf.h
> @@ -1,8 +1,9 @@
> #ifndef _ADDRCONF_H
> #define _ADDRCONF_H
>
> -#define MAX_RTR_SOLICITATIONS 3
> +#define MAX_RTR_SOLICITATIONS -1 /* unlimited */
> #define RTR_SOLICITATION_INTERVAL (4*HZ)
> +#define RTR_SOLICITATION_MAX_INTERVAL (3600*HZ) /* 1 hour */
>
> #define MIN_VALID_LIFETIME (2*3600) /* 2 hours */
>
> diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
> index 1c8b6820b694..515352c6280a 100644
> --- a/include/net/if_inet6.h
> +++ b/include/net/if_inet6.h
> @@ -201,6 +201,7 @@ struct inet6_dev {
> struct ipv6_devstat stats;
>
> struct timer_list rs_timer;
> + __s32 rs_interval; /* in jiffies */
> __u8 rs_probes;
>
> __u8 addr_gen_mode;
> diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h
> index 395876060f50..8c2772340c3f 100644
> --- a/include/uapi/linux/ipv6.h
> +++ b/include/uapi/linux/ipv6.h
> @@ -177,6 +177,7 @@ enum {
> DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
> DEVCONF_DROP_UNSOLICITED_NA,
> DEVCONF_KEEP_ADDR_ON_DOWN,
> + DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
> DEVCONF_MAX
> };
>
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index 2f1f5d439788..49bee9bc5ff3 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -112,6 +112,27 @@ static inline u32 cstamp_delta(unsigned long cstamp)
> return (cstamp - INITIAL_JIFFIES) * 100UL / HZ;
> }
>
> +static inline s32 rfc3315_s14_backoff_init(s32 irt)
> +{
> + /* multiply 'initial retransmission time' by 0.9 .. 1.1 */
> + u64 tmp = (900000 + prandom_u32() % 200001) * (u64)irt;
> + do_div(tmp, 1000000);
> + return (s32)tmp;
> +}
> +
> +static inline s32 rfc3315_s14_backoff_update(s32 rt, s32 mrt)
> +{
> + /* multiply 'retransmission timeout' by 1.9 .. 2.1 */
> + u64 tmp = (1900000 + prandom_u32() % 200001) * (u64)rt;
> + do_div(tmp, 1000000);
> + if ((s32)tmp > mrt) {
> + /* multiply 'maximum retransmission time' by 0.9 .. 1.1
> */
> + tmp = (900000 + prandom_u32() % 200001) * (u64)mrt;
> + do_div(tmp, 1000000);
Could you use msecs_to_jiffies here to make the units more clear like I
proposed in the last mail? Or is there a reason not to?
Bye,
Hannes
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff
2016-09-28 7:42 ` Hannes Frederic Sowa
@ 2016-09-28 7:46 ` Maciej Żenczykowski
2016-09-29 9:56 ` Erik Kline
0 siblings, 1 reply; 7+ messages in thread
From: Maciej Żenczykowski @ 2016-09-28 7:46 UTC (permalink / raw)
To: Hannes Frederic Sowa
Cc: David S . Miller, Linux NetDev, Erik Kline, Lorenzo Colitti,
Hideaki Yoshifuji
I'm not sure what line you're referring to.
There are *no* outright jiffies or msecs in this patch, with the
exception of the (3600*HZ) line which is already obvious enough.
The 900000 200001 1900000 1000000 constants are not jiffies nor
miliseconds, they're simply numbers, such that 900000/1000000 = 0.9
and 200001/1000000 =~ 0.2 (the +1 is to deal with 0) and
1900000/1000000 = 1.9
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff
2016-09-28 6:57 [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff Maciej Żenczykowski
2016-09-28 7:42 ` Hannes Frederic Sowa
@ 2016-09-30 5:54 ` David Miller
1 sibling, 0 replies; 7+ messages in thread
From: David Miller @ 2016-09-30 5:54 UTC (permalink / raw)
To: zenczykowski; +Cc: maze, netdev, ek, lorenzo, hannes, hideaki.yoshifuji
From: Maciej Żenczykowski <zenczykowski@gmail.com>
Date: Tue, 27 Sep 2016 23:57:58 -0700
> From: Maciej Żenczykowski <maze@google.com>
>
> This implements:
> https://tools.ietf.org/html/rfc7559
>
> Backoff is performed according to RFC3315 section 14:
> https://tools.ietf.org/html/rfc3315#section-14
>
> We allow setting /proc/sys/net/ipv6/conf/*/router_solicitations
> to a negative value meaning an unlimited number of retransmits,
> and we make this the new default (inline with the RFC).
>
> We also add a new setting:
> /proc/sys/net/ipv6/conf/*/router_solicitation_max_interval
> defaulting to 1 hour (per RFC recommendation).
>
> Signed-off-by: Maciej Żenczykowski <maze@google.com>
Applied to net-next, thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 5/7] ipv6 addrconf: implement RFC7559 router solicitation backoff
@ 2016-09-25 2:14 Maciej Żenczykowski
2016-09-25 2:14 ` [PATCH] " Maciej Żenczykowski
0 siblings, 1 reply; 7+ messages in thread
From: Maciej Żenczykowski @ 2016-09-25 2:14 UTC (permalink / raw)
To: Maciej Żenczykowski, David S . Miller
Cc: Linux NetDev, Erik Kline, Lorenzo Colitti
Ok, so that seems to have all sorts of __divdi3 or __aeabi_ldivmod
undefined errors on 32-bit platforms (ie. arm/m68k/i386).
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff
2016-09-25 2:14 [PATCH 5/7] " Maciej Żenczykowski
@ 2016-09-25 2:14 ` Maciej Żenczykowski
2016-09-25 9:33 ` David Miller
0 siblings, 1 reply; 7+ messages in thread
From: Maciej Żenczykowski @ 2016-09-25 2:14 UTC (permalink / raw)
To: Maciej Żenczykowski, David S . Miller
Cc: netdev, Erik Kline, Lorenzo Colitti
From: Maciej Żenczykowski <maze@google.com>
This implements:
https://tools.ietf.org/html/rfc7559
Backoff is performed according to RFC3315 section 14:
https://tools.ietf.org/html/rfc3315#section-14
Signed-off-by: Maciej Żenczykowski <maze@google.com>
---
include/net/if_inet6.h | 1 +
net/ipv6/addrconf.c | 31 +++++++++++++++++++++++++++----
2 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index 1c8b6820b694..515352c6280a 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -201,6 +201,7 @@ struct inet6_dev {
struct ipv6_devstat stats;
struct timer_list rs_timer;
+ __s32 rs_interval; /* in jiffies */
__u8 rs_probes;
__u8 addr_gen_mode;
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 255be34cdbce..6384a1cde056 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -112,6 +112,24 @@ static inline u32 cstamp_delta(unsigned long cstamp)
return (cstamp - INITIAL_JIFFIES) * 100UL / HZ;
}
+static inline s32 rfc3315_s14_backoff_init(s32 initial)
+{
+ u32 r = (9 << 20) / 10 + (prandom_u32() % ((2 << 20) / 10 + 1));
+ s32 v = initial * (u64)r >> 20; /* ~ multiply by 0.9 .. 1.1 */
+ return v;
+}
+
+static inline s32 rfc3315_s14_backoff_update(s32 cur, s32 ceiling)
+{
+ u32 r = (19 << 20) / 10 + (prandom_u32() % ((2 << 20) / 10 + 1));
+ s32 v = cur * (u64)r >> 20; /* ~ multiply by 1.9 .. 2.1 */
+ if (v > ceiling) {
+ r -= 1 << 20;
+ v = ceiling * (u64)r >> 20; /* ~ multiply by 0.9 .. 1.1 */
+ }
+ return v;
+}
+
#ifdef CONFIG_SYSCTL
static int addrconf_sysctl_register(struct inet6_dev *idev);
static void addrconf_sysctl_unregister(struct inet6_dev *idev);
@@ -3698,11 +3716,13 @@ static void addrconf_rs_timer(unsigned long data)
goto put;
write_lock(&idev->lock);
+ idev->rs_interval = rfc3315_s14_backoff_update(
+ idev->rs_interval, idev->cnf.rtr_solicit_max_interval);
/* The wait after the last probe can be shorter */
addrconf_mod_rs_timer(idev, (idev->rs_probes ==
idev->cnf.rtr_solicits) ?
idev->cnf.rtr_solicit_delay :
- idev->cnf.rtr_solicit_interval);
+ idev->rs_interval);
} else {
/*
* Note: we do not support deprecated "all on-link"
@@ -3973,10 +3993,11 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
write_lock_bh(&ifp->idev->lock);
spin_lock(&ifp->lock);
+ ifp->idev->rs_interval = rfc3315_s14_backoff_init(
+ ifp->idev->cnf.rtr_solicit_interval);
ifp->idev->rs_probes = 1;
ifp->idev->if_flags |= IF_RS_SENT;
- addrconf_mod_rs_timer(ifp->idev,
- ifp->idev->cnf.rtr_solicit_interval);
+ addrconf_mod_rs_timer(ifp->idev, ifp->idev->rs_interval);
spin_unlock(&ifp->lock);
write_unlock_bh(&ifp->idev->lock);
}
@@ -5132,8 +5153,10 @@ update_lft:
if (update_rs) {
idev->if_flags |= IF_RS_SENT;
+ idev->rs_interval = rfc3315_s14_backoff_init(
+ idev->cnf.rtr_solicit_interval);
idev->rs_probes = 1;
- addrconf_mod_rs_timer(idev, idev->cnf.rtr_solicit_interval);
+ addrconf_mod_rs_timer(idev, idev->rs_interval);
}
/* Well, that's kinda nasty ... */
--
2.8.0.rc3.226.g39d4020
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff
2016-09-25 2:14 ` [PATCH] " Maciej Żenczykowski
@ 2016-09-25 9:33 ` David Miller
0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2016-09-25 9:33 UTC (permalink / raw)
To: zenczykowski; +Cc: maze, netdev, ek, lorenzo
Please do not do this.
When you need to repsin a patch in a patch series to fix
or otherwise resolve something, you must make a fresh
resubmission of the entire patch series.
You also must properly mark the resubmission with a
proper indication that this is a new version of the
patch series by saying, for example, "[PATCH v2 ..."
in the Subject lines.
Thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-09-30 5:55 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-28 6:57 [PATCH] ipv6 addrconf: implement RFC7559 router solicitation backoff Maciej Żenczykowski
2016-09-28 7:42 ` Hannes Frederic Sowa
2016-09-28 7:46 ` Maciej Żenczykowski
2016-09-29 9:56 ` Erik Kline
2016-09-30 5:54 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2016-09-25 2:14 [PATCH 5/7] " Maciej Żenczykowski
2016-09-25 2:14 ` [PATCH] " Maciej Żenczykowski
2016-09-25 9:33 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).