[Ns-developers] Implementation of an IPv6 stack for NS-3
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Tue Jun 17 08:40:37 PDT 2008
On Tue, 2008-06-17 at 10:03 +0200, Sébastien Vincent wrote:
> > Another issue I wonder about is what the socket API looks like. I have
> > to confess that I know next to nothing about ipv6 so, I would like to
> > know how OSes actually export ipv6 sockets ? How can I specify (in a
> > real OS) that I want an ipv6 tcp socket ? Can I specify that I want a
> > tcp socket to listen both on ipv4 and ipv6 on the same port ?
> >
> Simply put AF_INET6 for the "domain" parameter of socket()
> i.e. for TCP : int sock=socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
> other useful C function :
> - getaddrinfo : to retrieve IPv6 address from a DNS name (for bind(),
> connect(), ...);
> - getnameinfo : to retriev name (hostname, ...) from IPv6 address;
> - inet_ntop / inet_pton (with AF_INET6 value for "af" parameter).
>
> The IPv6 socket by default can receive both IPv4 and IPv6 if it is bind
> with the unspecified address (::). The IPv4 address will be represented
> as IPv4-mapped address (i.e. ::ffff:192.168.0.1). T**he setsockopt
> option IPV6_V6ONLY can disable this.
I see. Thanks for the explanation.
> In IPv4 under GNU/Linux, when you want more than one address per
> interface, you have to deals with alias (ifconfig eth0:1 10.0.0.1) and
> it "creates" another interface. So your way to have multipe
> Ipv4Interface on same NetDevice is the same as Linux (for IPv4). But in
> IPv6 you have all the addresses in the same interface name. So my first
> impression was to do have a list of addresses as Linux and Unix do.
>
> eth1 Link encap:Ethernet HWaddr 00:xx:xx:xx:xx:xx
> inet adr:192.168.0.1 Bcast:192.168.0.255 Masque:255.255.255.0
> adr inet6: 2001:db80:aaaa::1234/64 Scope:Global
> adr inet6:2001:db80:bbbb::1234/64 Scope:Global
> adr inet6: fe80::1234/64 Scope:Lien
> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
> RX packets:5382749 errors:0 dropped:0 overruns:0 frame:0
> TX packets:917577 errors:0 dropped:0 overruns:0 carrier:0
> collisions:0 lg file transmission:1000
> RX bytes:1189822564 (1.1 GiB) TX bytes:243898797 (232.6 MiB)
> Interruption:22
Ok. I would be curious to know why they have taken these different
approaches in linux.
Mathieu
More information about the Ns-developers
mailing list