From: Albert Cahalan <albert@users.sf.net>
To: linux-kernel mailing list <linux-kernel@vger.kernel.org>
Cc: viro@parcelfarce.linux.theplanet.co.uk, joshk@triplehelix.org
Subject: Re: consistent ioctl for getting all net interfaces?
Date: 23 May 2004 08:35:17 -0400 [thread overview]
Message-ID: <1085315717.955.920.camel@cube> (raw)
Viro cluelessly writes:
On Sat, May 22, 2004 at 09:28:28PM -0700, Joshua Kwan wrote:
>> I'm interested in not having to parse /proc/net/dev to get
>> a list of all available (not necessarily even up) interfaces
>> on the system. I investigated the ioctl SIOCGIFCONF, but it
>> seems to behave differently on 2.4 and 2.6 series kernels,
>> e.g. sometimes it won't return all interfaces.
>>
>> Is there some end-all ioctl that does what I want, or am
>> I forever doomed to process /proc/net/dev (in C, no less..)?
>
> ASCII is tough, let's go shopping?
>
> char name[17];
> FILE *in = fopen("/proc/net/dev", "r");
> if (!in)
> die("can't open");
> fscanf(in, "%*[^\n]\n%*[^\n]"); /* skip two lines */
> while (fscanf(in, " %16[^:]:%*[^\n]", name) == 1)
> do_whatever_you_want(name);
>
> That you are calling "forever doomed"? Wimp...
What makes you think you got that right? Do you have a
specification for the grammar? Let's look at an example
of /proc/net/dev, and I'll use my extensive /proc-parsing
experience to count your errors. Here is a sample:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth0:3077476015 33231846 0 0 0 0 0 0 101565261 774586 0 0 0 0 0 0
lo: 1360 24 0 0 0 0 0 0 1360 24 0 0 0 0 0 0
tap0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Excuse me while I vomit.
Let's start with the device names. Users can change
them at will, and some driver authors aren't normal.
So, in C notation, a name could be "x1: 1 2 3\n".
It doesn't even need to that evil to screw up your
wimpy parser. A simple "av6:3" would do nicely.
Think it won't happen? Sorry, but it does and will.
This is the nature of /proc crap.
Now we get to format changes. Don't you think the
above is kind of ugly? I sure do. I'm not crazy
enough to touch the formatting, but that readable
ASCII is a temptation for many. Just look at the
history of /proc/cpuinfo, which long ago looked a
bit more like the above in terms of ':' placement.
Also, it's foolish to rely on that leading space.
Here is what my data might look like in a few years:
Iface | Receive | Transmit
name |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth0 :3077476015 33231846 0 0 0 0 0 0 101565261 774586 0 0 0 0 0 0
lo : 1360 24 0 0 0 0 0 0 1360 24 0 0 0 0 0 0
tap0 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth1 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth2 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Subtle, isn't it? Your parser broke.
(then there is performance, or lack of it...)
next reply other threads:[~2004-05-23 14:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-23 12:35 Albert Cahalan [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-05-23 4:28 consistent ioctl for getting all net interfaces? Joshua Kwan
2004-05-23 5:35 ` viro
2004-05-23 5:57 ` Joshua Kwan
2004-05-23 6:05 ` viro
2004-05-23 15:20 ` Tigran Aivazian
2004-05-23 15:25 ` Tigran Aivazian
2004-05-23 15:29 ` Joshua Kwan
2004-05-30 20:25 ` Olaf Hering
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1085315717.955.920.camel@cube \
--to=albert@users.sf.net \
--cc=joshk@triplehelix.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.