Sebastien Roy wrote:
> On Thu, 2009-10-01 at 19:45 +0530, Vivek S wrote:
>> I can spawn ifconfig, but then how do i recognize errors?
>>
>
> You can tell whether the operation failed or not based on ifconfig's
> exit status. The problem is that you won't have fine-grained error
> semantics programatically (it would be unwise to parse the error strings
> printed to ifconfig's stderr).
There might not be much you can *do* about any failures other than
passing them along for a human to interpret, so that doesn't seem to me
like an insurmountable problem.
The only "big" problem I can see in that area is that the process that
invokes ifconfig may need to know what locale to use, so that the right
language error strings are produced. If this is far removed from the
user interface, it might be "hard" to do it right, where numeric error
codes would be easier to transport around.
If the original poster really wants to do this one by hand, then the
process (for Ethernet-like interfaces) looks something like this:
- Open the DLPI device as "fd1". It might be named "/dev/name" or
"/dev/nameN", depending on DLPI "style."
- ioctl(fd1, I_PUSH, "ip");
- ioctl(fd1, I_PUSH, "arp");
- ioctl(fd1, SIOCGLIFFLAGS, &lifr) to get flags.
- ioctl(fd1, SIOCSLIFNAME, &lifr) to set lifr_ppa and lifr_flags.
- Open "/dev/udp" as "fd2." This is the mux stream.
- ioctl(fd2, I_PUSH, "arp");
- Open the DLPI device again as "fd3." This is the ARP stream.
- ioctl(fd3, I_PUSH, "arp");
- ioctl(fd3, SIOCSLIFNAME, &lifr) to set interface name for arp.
- ioctl(fd2, I_PLINK, fd1);
- ioctl(fd2, I_PLINK, fd3);
- close fd1, fd2, and fd3. You're done.
The original poster should also be aware that, other than pushing the
"ip" module on top of a DLPI stream, everything about this sequence
reeks of internal implementation details, and could (and has) changed
over time. Also note that the above doesn't handle IPMP or IPv6, and
probably has other functional defects as well. It's the bare minimum;
you get much more by using ifconfig.
--
James Carlson 42.703N 71.076W <[email protected]>
_______________________________________________
networking-discuss mailing list
[email protected]