]> err.no Git - linux-2.6/blobdiff - net/ipv4/fib_rules.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6] / net / ipv4 / fib_rules.c
index 39d0aadb9a2a451c93f6b8f34fbf3c84e8e09542..0dd4d06e456d7e3d56ee44482db85e882ff2e1c7 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/errno.h>
 #include <linux/in.h>
 #include <linux/inet.h>
+#include <linux/inetdevice.h>
 #include <linux/netdevice.h>
 #include <linux/if_arp.h>
 #include <linux/proc_fs.h>
@@ -367,13 +368,14 @@ static struct notifier_block fib_rules_notifier = {
 
 static __inline__ int inet_fill_rule(struct sk_buff *skb,
                                     struct fib_rule *r,
-                                    struct netlink_callback *cb)
+                                    struct netlink_callback *cb,
+                                    unsigned int flags)
 {
        struct rtmsg *rtm;
        struct nlmsghdr  *nlh;
        unsigned char    *b = skb->tail;
 
-       nlh = NLMSG_PUT(skb, NETLINK_CREDS(cb->skb)->pid, cb->nlh->nlmsg_seq, RTM_NEWRULE, sizeof(*rtm));
+       nlh = NLMSG_NEW_ANSWER(skb, cb, RTM_NEWRULE, sizeof(*rtm), flags);
        rtm = NLMSG_DATA(nlh);
        rtm->rtm_family = AF_INET;
        rtm->rtm_dst_len = r->r_dst_len;
@@ -422,7 +424,7 @@ int inet_dump_rules(struct sk_buff *skb, struct netlink_callback *cb)
        for (r=fib_rules, idx=0; r; r = r->r_next, idx++) {
                if (idx < s_idx)
                        continue;
-               if (inet_fill_rule(skb, r, cb) < 0)
+               if (inet_fill_rule(skb, r, cb, NLM_F_MULTI) < 0)
                        break;
        }
        read_unlock(&fib_rules_lock);