|
@@ -1230,9 +1230,18 @@ int ip6_route_add(struct fib6_config *cfg)
|
|
|
if (cfg->fc_metric == 0)
|
|
|
cfg->fc_metric = IP6_RT_PRIO_USER;
|
|
|
|
|
|
- table = fib6_new_table(net, cfg->fc_table);
|
|
|
+ err = -ENOBUFS;
|
|
|
+ if (NULL != cfg->fc_nlinfo.nlh &&
|
|
|
+ !(cfg->fc_nlinfo.nlh->nlmsg_flags&NLM_F_CREATE)) {
|
|
|
+ table = fib6_get_table(net, cfg->fc_table);
|
|
|
+ if (table == NULL) {
|
|
|
+ printk(KERN_WARNING "IPv6: NLM_F_CREATE should be specified when creating new route\n");
|
|
|
+ table = fib6_new_table(net, cfg->fc_table);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ table = fib6_new_table(net, cfg->fc_table);
|
|
|
+ }
|
|
|
if (table == NULL) {
|
|
|
- err = -ENOBUFS;
|
|
|
goto out;
|
|
|
}
|
|
|
|