]> git.ipfire.org Git - thirdparty/libnl.git/commitdiff
Revert "routing rules: mark support"
authorThomas Graf <tgraf@suug.ch>
Fri, 29 Oct 2010 09:52:22 +0000 (11:52 +0200)
committerThomas Graf <tgraf@suug.ch>
Fri, 29 Oct 2010 09:52:22 +0000 (11:52 +0200)
This reverts commit ee88c71d16a6b777c916275401a971eea78871d6.

include/netlink-types.h
include/netlink/route/rule.h
lib/route/rule.c

index d756d71782c6855a9205c74ae58790f503006c57..3dc760fea25b9f297535000a4ef471127b1b0ed7 100644 (file)
@@ -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;
index a0729b5e0b3ea49eda90ecd555180af478e67ea3..928dc0f174846cd7afc9cb92a5d2eb1cc7f89a45 100644 (file)
@@ -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);
index 381c5845c36decdf1c0837d8c449f6466ff2f951..182879fb3ff8e8e7c3913d04d74a0354d7d9a980 100644 (file)
@@ -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)