diff options
| author | Thomas Graf <tgraf@suug.ch> | 2005-06-19 01:53:48 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2005-06-19 01:53:48 -0400 |
| commit | 1797754ea7ee5e0d859b0a32506ff999f8d5fb71 (patch) | |
| tree | a35d05f9106d903412a6fff714be38427fc4d0fa /net | |
| parent | af0d114176720c2100dfa624ab433796d333d730 (diff) | |
[NETLINK]: Introduce NLMSG_NEW macro to better handle netlink flags
Introduces a new macro NLMSG_NEW which extends NLMSG_PUT but takes
a flags argument. NLMSG_PUT stays there for compatibility but now
calls NLMSG_NEW with flags == 0. NLMSG_PUT_ANSWER is renamed to
NLMSG_NEW_ANSWER which now also takes a flags argument.
Also converts the users of NLMSG_PUT_ANSWER to use NLMSG_NEW_ANSWER
and fixes the two direct users of __nlmsg_put to either provide
the flags or use NLMSG_NEW(_ANSWER).
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/core/neighbour.c | 8 | ||||
| -rw-r--r-- | net/netlink/af_netlink.c | 8 |
2 files changed, 9 insertions, 7 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 2296a145fb78..0fb742e228cc 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
| @@ -1590,8 +1590,8 @@ static int neightbl_fill_info(struct neigh_table *tbl, struct sk_buff *skb, | |||
| 1590 | struct nlmsghdr *nlh; | 1590 | struct nlmsghdr *nlh; |
| 1591 | struct ndtmsg *ndtmsg; | 1591 | struct ndtmsg *ndtmsg; |
| 1592 | 1592 | ||
| 1593 | nlh = NLMSG_PUT_ANSWER(skb, cb, RTM_NEWNEIGHTBL, sizeof(struct ndtmsg)); | 1593 | nlh = NLMSG_NEW_ANSWER(skb, cb, RTM_NEWNEIGHTBL, sizeof(struct ndtmsg), |
| 1594 | nlh->nlmsg_flags |= NLM_F_MULTI; | 1594 | NLM_F_MULTI); |
| 1595 | 1595 | ||
| 1596 | ndtmsg = NLMSG_DATA(nlh); | 1596 | ndtmsg = NLMSG_DATA(nlh); |
| 1597 | 1597 | ||
| @@ -1675,8 +1675,8 @@ static int neightbl_fill_param_info(struct neigh_table *tbl, | |||
| 1675 | struct ndtmsg *ndtmsg; | 1675 | struct ndtmsg *ndtmsg; |
| 1676 | struct nlmsghdr *nlh; | 1676 | struct nlmsghdr *nlh; |
| 1677 | 1677 | ||
| 1678 | nlh = NLMSG_PUT_ANSWER(skb, cb, RTM_NEWNEIGHTBL, sizeof(struct ndtmsg)); | 1678 | nlh = NLMSG_NEW_ANSWER(skb, cb, RTM_NEWNEIGHTBL, sizeof(struct ndtmsg), |
| 1679 | nlh->nlmsg_flags |= NLM_F_MULTI; | 1679 | NLM_F_MULTI); |
| 1680 | 1680 | ||
| 1681 | ndtmsg = NLMSG_DATA(nlh); | 1681 | ndtmsg = NLMSG_DATA(nlh); |
| 1682 | 1682 | ||
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index e41ce458c2a9..70bcd4744d93 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
| @@ -1095,8 +1095,7 @@ static int netlink_dump(struct sock *sk) | |||
| 1095 | return 0; | 1095 | return 0; |
| 1096 | } | 1096 | } |
| 1097 | 1097 | ||
| 1098 | nlh = __nlmsg_put(skb, NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq, NLMSG_DONE, sizeof(int)); | 1098 | nlh = NLMSG_NEW_ANSWER(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI); |
| 1099 | nlh->nlmsg_flags |= NLM_F_MULTI; | ||
| 1100 | memcpy(NLMSG_DATA(nlh), &len, sizeof(len)); | 1099 | memcpy(NLMSG_DATA(nlh), &len, sizeof(len)); |
| 1101 | skb_queue_tail(&sk->sk_receive_queue, skb); | 1100 | skb_queue_tail(&sk->sk_receive_queue, skb); |
| 1102 | sk->sk_data_ready(sk, skb->len); | 1101 | sk->sk_data_ready(sk, skb->len); |
| @@ -1107,6 +1106,9 @@ static int netlink_dump(struct sock *sk) | |||
| 1107 | 1106 | ||
| 1108 | netlink_destroy_callback(cb); | 1107 | netlink_destroy_callback(cb); |
| 1109 | return 0; | 1108 | return 0; |
| 1109 | |||
| 1110 | nlmsg_failure: | ||
| 1111 | return -ENOBUFS; | ||
| 1110 | } | 1112 | } |
| 1111 | 1113 | ||
| 1112 | int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | 1114 | int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, |
| @@ -1178,7 +1180,7 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err) | |||
| 1178 | } | 1180 | } |
| 1179 | 1181 | ||
| 1180 | rep = __nlmsg_put(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, | 1182 | rep = __nlmsg_put(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, |
| 1181 | NLMSG_ERROR, sizeof(struct nlmsgerr)); | 1183 | NLMSG_ERROR, sizeof(struct nlmsgerr), 0); |
| 1182 | errmsg = NLMSG_DATA(rep); | 1184 | errmsg = NLMSG_DATA(rep); |
| 1183 | errmsg->error = err; | 1185 | errmsg->error = err; |
| 1184 | memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(struct nlmsghdr)); | 1186 | memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(struct nlmsghdr)); |
