the ip rule functions do not declare their own message attributes for
fwmark functionality, but rather (ab)use attributes defined for
other purposes. This patch just better abstracts the relationship
and documents it with a #define

Sign-off-by: Michael Richardson <[EMAIL PROTECTED]>


---

 include/linux/rtnetlink.h |    4 +++-
 net/ipv4/fib_rules.c      |   10 +++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

524e16842f5c12cebc0937718e7323662490a4f7
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index d50482b..27fd17e 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -257,7 +257,7 @@ enum rtattr_type_t
        RTA_PREFSRC,
        RTA_METRICS,
        RTA_MULTIPATH,
-       RTA_PROTOINFO,
+       RTA_PROTOINFO,       /* also used for fwmark in iprule */
        RTA_FLOW,
        RTA_CACHEINFO,
        RTA_SESSION,
@@ -265,6 +265,8 @@ enum rtattr_type_t
        __RTA_MAX
 };
 
+#define RTA_FWMARK      RTA_PROTOINFO
+
 #define RTA_MAX (__RTA_MAX - 1)
 
 #define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct 
rtmsg))))
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c
index 0dd4d06..de327b3 100644
--- a/net/ipv4/fib_rules.c
+++ b/net/ipv4/fib_rules.c
@@ -116,7 +116,7 @@ int inet_rtm_delrule(struct sk_buff *skb
                    (!rta[RTA_DST-1] || memcmp(RTA_DATA(rta[RTA_DST-1]), 
&r->r_dst, 4) == 0) &&
                    rtm->rtm_tos == r->r_tos &&
 #ifdef CONFIG_IP_ROUTE_FWMARK
-                   (!rta[RTA_PROTOINFO-1] || 
memcmp(RTA_DATA(rta[RTA_PROTOINFO-1]), &r->r_fwmark, 4) == 0) &&
+                   (!rta[RTA_FWMARK-1] || memcmp(RTA_DATA(rta[RTA_FWMARK-1]), 
&r->r_fwmark, 4) == 0) &&
 #endif
                    (!rtm->rtm_type || rtm->rtm_type == r->r_action) &&
                    (!rta[RTA_PRIORITY-1] || 
memcmp(RTA_DATA(rta[RTA_PRIORITY-1]), &r->r_preference, 4) == 0) &&
@@ -200,8 +200,8 @@ int inet_rtm_newrule(struct sk_buff *skb
        new_r->r_dstmask = inet_make_mask(rtm->rtm_dst_len);
        new_r->r_tos = rtm->rtm_tos;
 #ifdef CONFIG_IP_ROUTE_FWMARK
-       if (rta[RTA_PROTOINFO-1])
-               memcpy(&new_r->r_fwmark, RTA_DATA(rta[RTA_PROTOINFO-1]), 4);
+       if (rta[RTA_FWMARK-1]) 
+               memcpy(&new_r->r_fwmark,      RTA_DATA(rta[RTA_FWMARK-1]), 4);
 #endif
        new_r->r_action = rtm->rtm_type;
        new_r->r_flags = rtm->rtm_flags;
@@ -382,8 +382,8 @@ static __inline__ int inet_fill_rule(str
        rtm->rtm_src_len = r->r_src_len;
        rtm->rtm_tos = r->r_tos;
 #ifdef CONFIG_IP_ROUTE_FWMARK
-       if (r->r_fwmark)
-               RTA_PUT(skb, RTA_PROTOINFO, 4, &r->r_fwmark);
+       if (r->r_fwmark) 
+               RTA_PUT(skb, RTA_FWMARK, 4, &r->r_fwmark);
 #endif
        rtm->rtm_table = r->r_table;
        rtm->rtm_protocol = 0;
-- 



Attachment: pgpU7zELC18zh.pgp
Description: PGP signature

Reply via email to