Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751810AbbHTF7l (ORCPT ); Thu, 20 Aug 2015 01:59:41 -0400 Received: from mail-ob0-f182.google.com ([209.85.214.182]:33996 "EHLO mail-ob0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751529AbbHTF7j (ORCPT ); Thu, 20 Aug 2015 01:59:39 -0400 MIME-Version: 1.0 In-Reply-To: References: From: Scott Feldman Date: Wed, 19 Aug 2015 22:59:19 -0700 Message-ID: Subject: Re: Exporting obscene amounts of data in rtnl_link_ops->fill_info() To: "Jason A. Donenfeld" Cc: Netdev , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2007 Lines: 40 On Wed, Aug 19, 2015 at 5:47 PM, Jason A. Donenfeld wrote: > Hi guys, > > I have a new link driver that registers a rtnl_link_ops. For many > things, the rtnl interfaces are perfectly suited: I can use netlink in > userspace to check out packet counts, adjust interface parameters, and > all sorts of things. There is even the "fill_info" function exporting > interface-specific types of data to userspace through the standard > netlink interfaces. I'm glad this is here, because it's exactly what I > want. > > Problem: sometimes I want to export a *lot* of data to userspace. When > this happens, even if I make the netlink socket receive buffer really > huge, this code path is still reached in rtnetlink.c: > > err = rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK, > NETLINK_CB(cb->skb).portid, > cb->nlh->nlmsg_seq, 0, > NLM_F_MULTI, > ext_filter_mask); > /* If we ran out of room on the first message, > * we're in trouble > */ > WARN_ON((err == -EMSGSIZE) && (skb->len == 0)); > > That is -- it tries to fill the skb (for sending it back to > userspace), but doesn't have enough room, so it returns -EMSGSIZE. > That seems like reasonable behavior, but it doesn't really help me > obtain my goal. I'd like to send quite a bit of data back to userspace > for a network interface, and I'd like to do it using the standard > netlink APIs. Is this possible? What kind of data are you sending up? Maybe there is an alternate interface. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/