[gull] IPV6 & IPV4

Christian Grigis glove at grigri.org
Fri Nov 13 11:12:15 CET 2009


Hello,

On Thu, Nov 12, 2009 at 05:53:44PM +0100, Daniel Cordey wrote:
> Bref, j'ai cherche sur le net et lu des RFCs (pas tous !), mais, si je 
> comprends maintenant assez bien les mechanismes, je ne comprends toujours pas 
> comment ifconfig arrive a recuperer cette adresse IPV4... :-)

À première vue, il semblerait que ifconfig utilise un ioctl() sur un
socket ouvert pour l'adresse IPV4, et /proc/net/if_inet6 pour l'adresse
IPV6:

% strace -e open,ioctl,socket /sbin/ifconfig eth0
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
socket(PF_FILE, SOCK_DGRAM, 0)          = 3
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
open("/proc/net/dev", O_RDONLY)         = 6
ioctl(5, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(5, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr=00:1d:60:7b:ea:53}) = 0
ioctl(5, SIOCGIFMETRIC, {ifr_name="eth0", ifr_metric=0}) = 0
ioctl(5, SIOCGIFMTU, {ifr_name="eth0", ifr_mtu=1500}) = 0
ioctl(5, SIOCGIFMAP, {ifr_name="eth0", ifr_map={mem_start=0, mem_end=0, base_addr=0x8000, irq=19, dma=0, port=0}}) = 0
ioctl(5, SIOCGIFMAP, {ifr_name="eth0", ifr_map={mem_start=0, mem_end=0, base_addr=0x8000, irq=19, dma=0, port=0}}) = 0
ioctl(5, SIOCGIFTXQLEN, {ifr_name="eth0", ifr_qlen=1000}) = 0
open("/usr/share/locale/locale.alias", O_RDONLY) = 6
open("/usr/share/locale/en_US.UTF8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
ioctl(4, SIOCGIFADDR, {ifr_name="eth0", ifr_addr={AF_INET, inet_addr("10.1.1.5")}}) = 0
ioctl(4, SIOCGIFDSTADDR, {ifr_name="eth0", ifr_dstaddr={AF_INET, inet_addr("10.1.1.5")}}) = 0
ioctl(4, SIOCGIFBRDADDR, {ifr_name="eth0", ifr_broadaddr={AF_INET, inet_addr("10.1.1.255")}}) = 0
ioctl(4, SIOCGIFNETMASK, {ifr_name="eth0", ifr_netmask={AF_INET, inet_addr("255.255.255.0")}}) = 0
eth0      Link encap:Ethernet  HWaddr 00:1d:60:7b:ea:53
          inet addr:10.1.1.5  Bcast:10.1.1.255  Mask:255.255.255.0
open("/proc/net/if_inet6", O_RDONLY)    = 6
          inet6 addr: fe80::21d:60ff:fe7b:ea53/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28907568 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36475937 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15309667626 (14.2 GiB)  TX bytes:32748645636 (30.4 GiB)
          Interrupt:19 Base address:0x8000

Ce qui ne répond bien entendu pas à la question de comment faire
(si c'est possible?) uniquement avec les fichiers /proc/net/* ...

-Christian


More information about the gull mailing list