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; --
pgpU7zELC18zh.pgp
Description: PGP signature