On Tue, 2005-22-11 at 10:29 -0800, Brian Pomerantz wrote:
> On Tue, Nov 22, 2005 at 08:01:07AM -0500, jamal wrote:
> > 
> > Ok, here it is with the change to check the sysctl once. 
> > 
> > Brian, can you retest on your side - my basic tests pass.
> > If it passes, just respond with an acked-by comment.
> > 
> > Dave, if (ACK from Brian && no further comments) please apply
> > Also, same comment applies as before; this is a bug fix and you may
> > wanna consider it as 2.6.15 material.
> > 
> > cheers,
> > jamal
> > 
> > 
> 
> Okay, looks good for me.  It passes the battery of tests I've been
> throwing at it.
> 
> 
> BAPper
> 
> 
> ----------------------------------------------------------
> 
> This patch fixes the problem with promoting aliases when:
> a) a single primary and > 1 secondary addresses
> b) multiple primary addresses each with at least one secondary address
> 
> Based on earlier efforts from Brian Pomerantz <[EMAIL PROTECTED]>,
> Patrick McHardy <[EMAIL PROTECTED]> and Thomas Graf <[EMAIL PROTECTED]>
> 
> Signed-off-by: Jamal Hadi Salim <[EMAIL PROTECTED]>
> Signed-off-by: Brian Pomerantz <[EMAIL PROTECTED]>
> ---
> 
>  include/net/route.h     |    3 +++
>  net/ipv4/devinet.c      |   40 ++++++++++++++++++++++++++++++----------
>  net/ipv4/fib_frontend.c |    2 +-
>  3 files changed, 34 insertions(+), 11 deletions(-)
> 
> diff --git a/include/net/route.h b/include/net/route.h
> index dbe79ca..e3e5436 100644
> --- a/include/net/route.h
> +++ b/include/net/route.h
> @@ -126,6 +126,9 @@ extern int                ip_rt_ioctl(unsigned int cmd
>  extern void          ip_rt_get_source(u8 *src, struct rtable *rt);
>  extern int           ip_rt_dump(struct sk_buff *skb,  struct 
> netlink_callback *cb);
>  
> +struct in_ifaddr;
> +extern void fib_add_ifaddr(struct in_ifaddr *);
> +
>  static inline void ip_rt_put(struct rtable * rt)
>  {
>       if (rt)
> diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
> index 4ec4b2c..04a6fe3 100644
> --- a/net/ipv4/devinet.c
> +++ b/net/ipv4/devinet.c
> @@ -234,7 +234,10 @@ static void inet_del_ifa(struct in_devic
>                        int destroy)
>  {
>       struct in_ifaddr *promote = NULL;
> -     struct in_ifaddr *ifa1 = *ifap;
> +     struct in_ifaddr *ifa, *ifa1 = *ifap;
> +     struct in_ifaddr *last_prim = in_dev->ifa_list;
> +     struct in_ifaddr *prev_prom = NULL;
> +     int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev);
>  
>       ASSERT_RTNL();
>  
> @@ -243,18 +246,22 @@ static void inet_del_ifa(struct in_devic
>        **/
>  
>       if (!(ifa1->ifa_flags & IFA_F_SECONDARY)) {
> -             struct in_ifaddr *ifa;
>               struct in_ifaddr **ifap1 = &ifa1->ifa_next;
>  
>               while ((ifa = *ifap1) != NULL) {
> +                     if (!do_promote && 
> +                         ifa1->ifa_scope <= ifa->ifa_scope)
> +                             last_prim = ifa;
> +

Hrm - this was not in the patch i posted. Are you sure this passed the
test?
What the above does is say we are going to record the last primary only
if we are _not_ doing promotion. The reverse of what i would expect.

cheers,
jamal


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to