fib_validate_source(): pass sk_buff instead of mark
authorMichael Smith <msmith@cbnco.com>
Thu, 7 Apr 2011 04:51:50 +0000 (04:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 11 Apr 2011 01:50:59 +0000 (18:50 -0700)
This makes sk_buff available for other use in fib_validate_source().

Signed-off-by: Michael Smith <msmith@cbnco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip_fib.h
net/ipv4/fib_frontend.c
net/ipv4/route.c

index e5d66ec88cf6eb0e80e912b8281ead02773948a0..514627f56339a59e1ff9e26d8a808dbe2c944135 100644 (file)
@@ -227,9 +227,9 @@ extern struct fib_table *fib_get_table(struct net *net, u32 id);
 /* Exported by fib_frontend.c */
 extern const struct nla_policy rtm_ipv4_policy[];
 extern void            ip_fib_init(void);
-extern int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
-                              struct net_device *dev, __be32 *spec_dst,
-                              u32 *itag, u32 mark);
+extern int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
+                              u8 tos, int oif, struct net_device *dev,
+                              __be32 *spec_dst, u32 *itag);
 extern void fib_select_default(struct fib_result *res);
 
 /* Exported by fib_semantics.c */
index 451088330bbb65dd5c6fda36f043eb2a68511ce6..f162f84b8d6d24bfba42bb7dbbef8651507f9d48 100644 (file)
@@ -188,9 +188,9 @@ EXPORT_SYMBOL(inet_dev_addr_type);
  * - check, that packet arrived from expected physical interface.
  * called with rcu_read_lock()
  */
-int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
-                       struct net_device *dev, __be32 *spec_dst,
-                       u32 *itag, u32 mark)
+int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, u8 tos,
+                       int oif, struct net_device *dev, __be32 *spec_dst,
+                       u32 *itag)
 {
        struct in_device *in_dev;
        struct flowi4 fl4;
@@ -202,7 +202,6 @@ int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
 
        fl4.flowi4_oif = 0;
        fl4.flowi4_iif = oif;
-       fl4.flowi4_mark = mark;
        fl4.daddr = src;
        fl4.saddr = dst;
        fl4.flowi4_tos = tos;
@@ -214,8 +213,7 @@ int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
                no_addr = in_dev->ifa_list == NULL;
                rpf = IN_DEV_RPFILTER(in_dev);
                accept_local = IN_DEV_ACCEPT_LOCAL(in_dev);
-               if (mark && !IN_DEV_SRC_VMARK(in_dev))
-                       fl4.flowi4_mark = 0;
+               fl4.flowi4_mark = IN_DEV_SRC_VMARK(in_dev) ? skb->mark : 0;
        }
 
        if (in_dev == NULL)
index 1628be53031424e26914230aa6c03943df1e70e0..052c9123e576a5887354543b6a89c26b1c2b9c3f 100644 (file)
@@ -1871,8 +1871,8 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
                        goto e_inval;
                spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
        } else {
-               err = fib_validate_source(saddr, 0, tos, 0, dev, &spec_dst,
-                                         &itag, 0);
+               err = fib_validate_source(skb, saddr, 0, tos, 0, dev, &spec_dst,
+                                         &itag);
                if (err < 0)
                        goto e_err;
        }
@@ -1981,8 +1981,8 @@ static int __mkroute_input(struct sk_buff *skb,
        }
 
 
-       err = fib_validate_source(saddr, daddr, tos, FIB_RES_OIF(*res),
-                                 in_dev->dev, &spec_dst, &itag, skb->mark);
+       err = fib_validate_source(skb, saddr, daddr, tos, FIB_RES_OIF(*res),
+                                 in_dev->dev, &spec_dst, &itag);
        if (err < 0) {
                ip_handle_martian_source(in_dev->dev, in_dev, skb, daddr,
                                         saddr);
@@ -2150,9 +2150,9 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
                goto brd_input;
 
        if (res.type == RTN_LOCAL) {
-               err = fib_validate_source(saddr, daddr, tos,
+               err = fib_validate_source(skb, saddr, daddr, tos,
                                          net->loopback_dev->ifindex,
-                                         dev, &spec_dst, &itag, skb->mark);
+                                         dev, &spec_dst, &itag);
                if (err < 0)
                        goto martian_source_keep_err;
                if (err)
@@ -2176,8 +2176,8 @@ brd_input:
        if (ipv4_is_zeronet(saddr))
                spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
        else {
-               err = fib_validate_source(saddr, 0, tos, 0, dev, &spec_dst,
-                                         &itag, skb->mark);
+               err = fib_validate_source(skb, saddr, 0, tos, 0, dev, &spec_dst,
+                                         &itag);
                if (err < 0)
                        goto martian_source_keep_err;
                if (err)