Message ID | 1305267894-3314-1-git-send-email-xiaosuo@gmail.com |
---|---|
State | Rejected, archived |
Delegated to: | David Miller |
Headers | show |
From: Changli Gao <xiaosuo@gmail.com> Date: Fri, 13 May 2011 14:24:54 +0800 > For NETLINK_USERSOCK, no one listens on PID 0, so sending a message only to > to a multicast group should not return -ECONNREFUSED. > > Signed-off-by: Changli Gao <xiaosuo@gmail.com> I don't think this is a great idea, creating different semantics for NETLINK_USERSOCK vs. other types. You have to set the pid to something which will receive the unicast message, and then you can also (on top of that) send it to a multicast group as well. But the base operation is always the unicast send, and that is what determines success/failure of the operation. I'm not applying this patch. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sat, May 14, 2011 at 4:48 AM, David Miller <davem@davemloft.net> wrote: > From: Changli Gao <xiaosuo@gmail.com> > Date: Fri, 13 May 2011 14:24:54 +0800 > >> For NETLINK_USERSOCK, no one listens on PID 0, so sending a message only to >> to a multicast group should not return -ECONNREFUSED. >> >> Signed-off-by: Changli Gao <xiaosuo@gmail.com> > > I don't think this is a great idea, creating different semantics for > NETLINK_USERSOCK vs. other types. > > You have to set the pid to something which will receive the unicast > message, and then you can also (on top of that) send it to a multicast > group as well. > > But the base operation is always the unicast send, and that is what > determines success/failure of the operation. > Yes, I have seen that the return value of netlink_broadcast() isn't returned to the caller, so the caller can't know whether the message broadcasted is sent successfully or not. It isn't a big problem, as netlink isn't a reliable datagram protocol. Without this patch applied, we can also send a message to a multicast group only, but ignore the -ECONNREFUSED error. Thanks.
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index c8f35b5..ba89304 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -1379,6 +1379,8 @@ static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock, if (dst_group) { atomic_inc(&skb->users); netlink_broadcast(sk, skb, dst_pid, dst_group, GFP_KERNEL); + if (dst_pid == 0 && sk->sk_protocol == NETLINK_USERSOCK) + return len; } err = netlink_unicast(sk, skb, dst_pid, msg->msg_flags&MSG_DONTWAIT);
For NETLINK_USERSOCK, no one listens on PID 0, so sending a message only to to a multicast group should not return -ECONNREFUSED. Signed-off-by: Changli Gao <xiaosuo@gmail.com> --- net/netlink/af_netlink.c | 2 ++ 1 file changed, 2 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html