Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 73550
b: refs/heads/master
c: 2994c63
h: refs/heads/master
v: v3
  • Loading branch information
Denis V. Lunev authored and David S. Miller committed Nov 11, 2007
1 parent 4d5013c commit 3b73e44
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 65 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 33d36bb83c5b566c98a441e791736e25dbc35fc3
refs/heads/master: 2994c63863ac350c4c8c6a65d8110749c2abb95c
3 changes: 3 additions & 0 deletions trunk/include/net/fib_rules.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,7 @@ extern int fib_rules_unregister(struct fib_rules_ops *);
extern int fib_rules_lookup(struct fib_rules_ops *,
struct flowi *, int flags,
struct fib_lookup_arg *);
extern int fib_default_rule_add(struct fib_rules_ops *,
u32 pref, u32 table,
u32 flags);
#endif
22 changes: 22 additions & 0 deletions trunk/net/core/fib_rules.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,28 @@
static LIST_HEAD(rules_ops);
static DEFINE_SPINLOCK(rules_mod_lock);

int fib_default_rule_add(struct fib_rules_ops *ops,
u32 pref, u32 table, u32 flags)
{
struct fib_rule *r;

r = kzalloc(ops->rule_size, GFP_KERNEL);
if (r == NULL)
return -ENOMEM;

atomic_set(&r->refcnt, 1);
r->action = FR_ACT_TO_TBL;
r->pref = pref;
r->table = table;
r->flags = flags;

/* The lock is not required here, the list in unreacheable
* at the moment this function is called */
list_add_tail(&r->list, &ops->rules_list);
return 0;
}
EXPORT_SYMBOL(fib_default_rule_add);

static void notify_rule_change(int event, struct fib_rule *rule,
struct fib_rules_ops *ops, struct nlmsghdr *nlh,
u32 pid);
Expand Down
13 changes: 2 additions & 11 deletions trunk/net/decnet/dn_rules.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,6 @@ struct dn_fib_rule
u8 flags;
};

static struct dn_fib_rule default_rule = {
.common = {
.refcnt = ATOMIC_INIT(2),
.pref = 0x7fff,
.table = RT_TABLE_MAIN,
.action = FR_ACT_TO_TBL,
},
};


int dn_fib_lookup(struct flowi *flp, struct dn_fib_res *res)
{
Expand Down Expand Up @@ -262,8 +253,8 @@ static struct fib_rules_ops dn_fib_rules_ops = {

void __init dn_fib_rules_init(void)
{
list_add_tail(&default_rule.common.list,
&dn_fib_rules_ops.rules_list);
BUG_ON(fib_default_rule_add(&dn_fib_rules_ops, 0x7fff,
RT_TABLE_MAIN, 0));
fib_rules_register(&dn_fib_rules_ops);
}

Expand Down
51 changes: 20 additions & 31 deletions trunk/net/ipv4/fib_rules.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,33 +49,6 @@ struct fib4_rule
#endif
};

static struct fib4_rule default_rule = {
.common = {
.refcnt = ATOMIC_INIT(2),
.pref = 0x7FFF,
.table = RT_TABLE_DEFAULT,
.action = FR_ACT_TO_TBL,
},
};

static struct fib4_rule main_rule = {
.common = {
.refcnt = ATOMIC_INIT(2),
.pref = 0x7FFE,
.table = RT_TABLE_MAIN,
.action = FR_ACT_TO_TBL,
},
};

static struct fib4_rule local_rule = {
.common = {
.refcnt = ATOMIC_INIT(2),
.table = RT_TABLE_LOCAL,
.action = FR_ACT_TO_TBL,
.flags = FIB_RULE_PERMANENT,
},
};

#ifdef CONFIG_NET_CLS_ROUTE
u32 fib_rules_tclass(struct fib_result *res)
{
Expand Down Expand Up @@ -319,11 +292,27 @@ static struct fib_rules_ops fib4_rules_ops = {
.owner = THIS_MODULE,
};

void __init fib4_rules_init(void)
static int __init fib_default_rules_init(void)
{
list_add_tail(&local_rule.common.list, &fib4_rules_ops.rules_list);
list_add_tail(&main_rule.common.list, &fib4_rules_ops.rules_list);
list_add_tail(&default_rule.common.list, &fib4_rules_ops.rules_list);
int err;

err = fib_default_rule_add(&fib4_rules_ops, 0,
RT_TABLE_LOCAL, FIB_RULE_PERMANENT);
if (err < 0)
return err;
err = fib_default_rule_add(&fib4_rules_ops, 0x7FFE,
RT_TABLE_MAIN, 0);
if (err < 0)
return err;
err = fib_default_rule_add(&fib4_rules_ops, 0x7FFF,
RT_TABLE_DEFAULT, 0);
if (err < 0)
return err;
return 0;
}

void __init fib4_rules_init(void)
{
BUG_ON(fib_default_rules_init());
fib_rules_register(&fib4_rules_ops);
}
37 changes: 15 additions & 22 deletions trunk/net/ipv6/fib6_rules.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,25 +31,6 @@ struct fib6_rule

static struct fib_rules_ops fib6_rules_ops;

static struct fib6_rule main_rule = {
.common = {
.refcnt = ATOMIC_INIT(2),
.pref = 0x7FFE,
.action = FR_ACT_TO_TBL,
.table = RT6_TABLE_MAIN,
},
};

static struct fib6_rule local_rule = {
.common = {
.refcnt = ATOMIC_INIT(2),
.pref = 0,
.action = FR_ACT_TO_TBL,
.table = RT6_TABLE_LOCAL,
.flags = FIB_RULE_PERMANENT,
},
};

struct dst_entry *fib6_rule_lookup(struct flowi *fl, int flags,
pol_lookup_t lookup)
{
Expand Down Expand Up @@ -270,11 +251,23 @@ static struct fib_rules_ops fib6_rules_ops = {
.owner = THIS_MODULE,
};

void __init fib6_rules_init(void)
static int __init fib6_default_rules_init(void)
{
list_add_tail(&local_rule.common.list, &fib6_rules_ops.rules_list);
list_add_tail(&main_rule.common.list, &fib6_rules_ops.rules_list);
int err;

err = fib_default_rule_add(&fib6_rules_ops, 0,
RT6_TABLE_LOCAL, FIB_RULE_PERMANENT);
if (err < 0)
return err;
err = fib_default_rule_add(&fib6_rules_ops, 0x7FFE, RT6_TABLE_MAIN, 0);
if (err < 0)
return err;
return 0;
}

void __init fib6_rules_init(void)
{
BUG_ON(fib6_default_rules_init());
fib_rules_register(&fib6_rules_ops);
}

Expand Down

0 comments on commit 3b73e44

Please sign in to comment.