Thomas Graf wrote:

> Adds the framework to support multiple IPv6 routing tables.
> Currently all automatically generated routes are put into the
> same table. This could be changed at a later point after
> considering the produced locking overhead.

Hi Thomes, some minor comments below.

> When locating routes for redirects only the main table is
> searched for now. Since policy rules will not be reversible
> it is unclear whether it makes sense to change this.

This is a good point. You are absolutely correct about the policy rules.

IIRC, I initially looked through all the tables, but skipped this
behavior when I rewrote the code for 2.6.11. Currently I'm once again
in favor of looping through them all. This is IMO at least closer to the
spirit of RFC 2461 section 8.3. where a host SHOULD update its
destination cache upon receiving a redirect. If we don't look through
all tables, we can't ensure this happens.

> Index: net-2.6.git/include/net/ip6_fib.h
> ===================================================================
> --- net-2.6.git.orig/include/net/ip6_fib.h
> +++ net-2.6.git/include/net/ip6_fib.h

<snip>

> @@ -143,12 +146,41 @@ struct rt6_statistics {
>  
>  typedef void                 (*f_pnode)(struct fib6_node *fn, void *);
>  
> -extern struct fib6_node              ip6_routing_table;
> +struct fib6_table {
> +     struct hlist_node       tb6_hlist;
> +     u32                     tb6_id;
> +     rwlock_t                tb6_lock;
> +     struct fib6_node        tb6_root;
> +};
> +
> +#define RT6_TABLE_UNSPEC     RT_TABLE_UNSPEC
> +#define RT6_TABLE_MAIN               RT_TABLE_MAIN
> +#define RT6_TABLE_LOCAL              RT6_TABLE_MAIN
> +#define RT6_TABLE_DFLT               RT6_TABLE_MAIN
> +#define RT6_TABLE_INFO               RT6_TABLE_MAIN

IMO it's a bit inconsistent to define a separate table entry for Route
Information generated routes, but not Prefix Information based ones.
What do you say about adding a RT6_TABLE_PRFX?

> Index: net-2.6.git/net/ipv6/route.c
> ===================================================================
> --- net-2.6.git.orig/net/ipv6/route.c
> +++ net-2.6.git/net/ipv6/route.c

<snip>

> @@ -1435,12 +1523,15 @@ static struct rt6_info *rt6_add_route_in
>  struct rt6_info *rt6_get_dflt_router(struct in6_addr *addr, struct 
> net_device *dev)
>  {    
>       struct rt6_info *rt;
> -     struct fib6_node *fn;
> +     struct fib6_table *table;
>  
> -     fn = &ip6_routing_table;
> +     /* TODO: It might be better to search all tables */
> +     table = fib6_get_table(RT6_TABLE_DFLT);

As long as the table for default routes is RT6_TABLE_DFLT and can't be
configured by the user, I think the correct behavior is just to search
RT6_TABLE_DFLT.

Otherwise it looks very good!

Regards,
Ville
-
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