summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2010-10-29 09:52:22 (GMT)
committerThomas Graf <tgraf@suug.ch>2010-10-29 09:52:22 (GMT)
commit1eccb7b99c5b4d58350ec28dc0e58a3466f37bfd (patch)
treecd84444e90160780ef6b05846a155c4c4da9d0e3
parent858527622a49c10920f6a5639b47fc9447023ece (diff)
downloadlibnl-1eccb7b99c5b4d58350ec28dc0e58a3466f37bfd.zip
libnl-1eccb7b99c5b4d58350ec28dc0e58a3466f37bfd.tar.gz
libnl-1eccb7b99c5b4d58350ec28dc0e58a3466f37bfd.tar.bz2
Revert "routing rules: mark support"
This reverts commit ee88c71d16a6b777c916275401a971eea78871d6.
-rw-r--r--include/netlink-types.h2
-rw-r--r--include/netlink/route/rule.h4
-rw-r--r--lib/route/rule.c26
3 files changed, 19 insertions, 13 deletions
diff --git a/include/netlink-types.h b/include/netlink-types.h
index d756d71..3dc760f 100644
--- a/include/netlink-types.h
+++ b/include/netlink-types.h
@@ -282,7 +282,7 @@ struct rtnl_rule
{
NLHDR_COMMON
- uint32_t r_mark;
+ uint64_t r_mark;
uint32_t r_prio;
uint32_t r_realms;
uint32_t r_table;
diff --git a/include/netlink/route/rule.h b/include/netlink/route/rule.h
index a0729b5..928dc0f 100644
--- a/include/netlink/route/rule.h
+++ b/include/netlink/route/rule.h
@@ -44,8 +44,8 @@ extern void rtnl_rule_set_family(struct rtnl_rule *, int);
extern int rtnl_rule_get_family(struct rtnl_rule *);
extern void rtnl_rule_set_prio(struct rtnl_rule *, int);
extern int rtnl_rule_get_prio(struct rtnl_rule *);
-extern void rtnl_rule_set_mark(struct rtnl_rule *, uint32_t);
-extern uint32_t rtnl_rule_get_mark(struct rtnl_rule *);
+extern void rtnl_rule_set_mark(struct rtnl_rule *, uint64_t);
+extern uint64_t rtnl_rule_get_mark(struct rtnl_rule *);
extern void rtnl_rule_set_table(struct rtnl_rule *, int);
extern int rtnl_rule_get_table(struct rtnl_rule *);
extern void rtnl_rule_set_dsfield(struct rtnl_rule *, int);
diff --git a/lib/route/rule.c b/lib/route/rule.c
index 381c584..182879f 100644
--- a/lib/route/rule.c
+++ b/lib/route/rule.c
@@ -72,9 +72,9 @@ static int rule_clone(struct nl_object *_dst, struct nl_object *_src)
static struct nla_policy rule_policy[RTA_MAX+1] = {
[RTA_PRIORITY] = { .type = NLA_U32 },
[RTA_FLOW] = { .type = NLA_U32 },
+ [RTA_PROTOINFO] = { .type = NLA_U32 },
[RTA_IIF] = { .type = NLA_STRING,
.maxlen = IFNAMSIZ, },
- [RTA_MARK] = { .type = NLA_U32 },
};
static int rule_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
@@ -127,6 +127,11 @@ static int rule_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
rule->ce_mask |= RULE_ATTR_DST;
}
+ if (tb[RTA_PROTOINFO]) {
+ rule->r_mark = nla_get_u32(tb[RTA_PROTOINFO]);
+ rule->ce_mask |= RULE_ATTR_MARK;
+ }
+
if (tb[RTA_IIF]) {
nla_strlcpy(rule->r_iif, tb[RTA_IIF], IFNAMSIZ);
rule->ce_mask |= RULE_ATTR_IIF;
@@ -149,11 +154,6 @@ static int rule_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
rule->ce_mask |= RULE_ATTR_TABLE;
}
- if (tb[RTA_MARK]) {
- rule->r_mark = nla_get_u32(tb[RTA_MARK]);
- rule->ce_mask |= RULE_ATTR_MARK;
- }
-
err = pp->pp_cb((struct nl_object *) rule, pp);
errout:
rtnl_rule_put(rule);
@@ -193,7 +193,7 @@ static void rule_dump_line(struct nl_object *o, struct nl_dump_params *p)
nl_dump(p, "tos %d ", r->r_dsfield);
if (r->ce_mask & RULE_ATTR_MARK)
- nl_dump(p, "mark %#x", r->r_mark);
+ nl_dump(p, "mark %" PRIx64 , r->r_mark);
if (r->ce_mask & RULE_ATTR_IIF)
nl_dump(p, "iif %s ", r->r_iif);
@@ -381,6 +381,9 @@ static int build_rule_msg(struct rtnl_rule *tmpl, int cmd, int flags,
if (tmpl->ce_mask & RULE_ATTR_PRIO)
NLA_PUT_U32(msg, RTA_PRIORITY, tmpl->r_prio);
+ if (tmpl->ce_mask & RULE_ATTR_MARK)
+ NLA_PUT_U32(msg, RTA_PROTOINFO, tmpl->r_mark);
+
if (tmpl->ce_mask & RULE_ATTR_REALMS)
NLA_PUT_U32(msg, RTA_FLOW, tmpl->r_realms);
@@ -532,15 +535,18 @@ int rtnl_rule_get_prio(struct rtnl_rule *rule)
return -1;
}
-void rtnl_rule_set_mark(struct rtnl_rule *rule, uint32_t mark)
+void rtnl_rule_set_mark(struct rtnl_rule *rule, uint64_t mark)
{
rule->r_mark = mark;
rule->ce_mask |= RULE_ATTR_MARK;
}
-uint32_t rtnl_rule_get_mark(struct rtnl_rule *rule)
+uint64_t rtnl_rule_get_mark(struct rtnl_rule *rule)
{
- return rule->r_mark;
+ if (rule->ce_mask & RULE_ATTR_MARK)
+ return rule->r_mark;
+ else
+ return UINT_LEAST64_MAX;
}
void rtnl_rule_set_table(struct rtnl_rule *rule, int table)