Hi all,
Some notes about IPv6 progress.
I have ported many part of the initial IPv6 work : Ipv6Interface,
Ipv6InterfaceAddress, Ipv6Route, NdiscCache, Icmpv6L4Protocol, ... and
adapted other ones to fit work that has been done (IPv4 refactoring).
Now I have a working example that used IPv6 raw socket: ping6 (./waf
--run ping6). This implementation is a work in progress, there are
additionnal work in routing to manage special multicast address
(all-nodes, all-routers, all-hosts) directly in Ipv6RoutingProtocol
subclasses instead of Ipv6L3Protocol (especially to allow L4 protocol to
send to these addresses).
You will find current work at
https://svnet.u-strasbg.fr/hg/ns-3-ipv6-2nd.
Files noted with (*) is a pure copy/paste/adapt from IPv4 ones.
Files added:
src/node/ipv6.cc,h (*)
src/node/ipv6-interface-address.cc,h
src/node/ipv6-raw-socket-factory.cc,h (*)
src/node/ipv6-route.cc,h
src/node/ipv6-routing-protocol.cc,h (*)
src/internet-stack/icmpv6-header.cc,h
src/internet-stack/icmpv6-l4-protocol.cc,h
src/internet-stack/ipv6-end-point.cc,h
src/internet-stack/ipv6-end-point-demux.cc,h
src/internet-stack/ipv6-interface.cc,h
src/internet-stack/ipv6-l3-protocol.cc,h
src/internet-stack/ipv6-l4-protocol.cc,h
src/internet-stack/ipv6-raw-socket-factory-impl.cc,h (*)
src/internet-stack/ipv6-raw-socket-impl.cc,h (*)
src/internet-stack/ndisc-cache.cc,h
src/routing/static-routing/ipv6-routing-table-entry.cc,h
src/routing/static-routing/ipv6-static-routing.cc,h (*)
src/routing/list-routing/ipv6-list-routing.cc,h (*)
src/helper/ipv6-address-helper.cc,h
src/helper/ipv6-interface-container.cc,h
src/helper/ipv6-list-routing-helper.cc,h (*)
src/helper/ipv6-routing-helper.cc,h (*)
src/helper/ipv6-static-routing-helper.cc,h (*)
src/helper/ping6-helper.cc,h
Files modified:
src/helper/internet-stack-helper.cc,h
=> add IPv6 stack directly with IPv4 ones (make dual stack node), I
think about adding methods to enable/disable IPv4 or IPv6 stack in order
to have IPv4 or IPv6 only node.
As you see many files have been copy/paste/adapt, but for the routing
part I think it will have some changes.
Next steps are :
- handle link-local multicast in routing part;
- handle Router Advertisement (receive, parse, extract prefix and
autoconfigured global address with it + timer);
- radvd application like;
- UDP and TCP protocol and implementation (need to be discussed here to
avoid duplicate code);
- IPv6 global routing.
Feedbacks are welcome.
Regards,
--
Sebastien Vincent
Sébastien Vincent a écrit :
> Hi Tom,
>
> Tom Henderson a écrit :
>> Sebastien,
>> I'd like to put the IPv6 code back on track for merging into
>> ns-3-dev. Can
>> you please provide a status update on the repos that you or your
>> group are
>> maintaining at
https://svnet.u-strasbg.fr/hg/ and what you might suggest
>> for next steps? Also, I'd like to know where the effort to refactor the
>> transport protocols and network layer to allow a common transport
>> protocol
>> implementation to use IPv4 and IPv6 ended up-- I see that the current
>> ns-3-ipv6 repo has separate IPv4 and IPv6 implementations for TCP.
>>
>>
>
> Currently,
https://svnet.u-strasbg.fr/hg/ns-3-ipv6 is very outdated.
> Two day ago I begin to work with up-to-date ns-3-dev and port some of
> the IPv6 components. It is located at
>
https://svnet.u-strasbg.fr/hg/ns-3-ipv6-2nd (not publicly available
> yet but I will unlock access tomorrow or next monday).
>
> For the next release, I really would like to have IPv6 routing, ICMPv6
> (+ neighbor discovery protocol), UDP, IPv6 applications such as
> UdpEcho, basic examples. If I had time radvd application to have IPv6
> address autoconfiguration, multihoming.
> The features delayed will be TCP (if we can not find a good and easy
> solution to integrate it nicely), IPv6 header extension
> (fragmentation, loose routing, ...).
>
> As I have a lot of work for my job arround wireless sensor network, I
> can not work as long as I want on ns-3. But I will do my best during
> my spare time on my holidays (tomorrow) to propose a working IPv6 stack.
>
>
> For ns-3-ipv6-2nd repo I have also integrated Ipv6InterfaceAddress,
> Ipv6Interface, NdiscCache. For routing code located in src/node, I
> think it will be exactly the same for IPv6 (except changing Ipv4* to
> Ipv6* ).
>
> For transport protocol, the main problem is (if I remember correctly)
> that Tcp/UdpL4Protocol' and Tcp/UdpSocketImpl functions take
> Ipv4Address arguments. We already have some discusses here with
> Mathieu but we have not found a good solution to handle this. By the
> way same problem for IPv4EndPoint / Ipv4EndPointDemux which majority
> of code will be duplicated.
>
>
> To resume, I will open my private repository next couple of days. I
> will continue to read code about recent IPv4 refactoring and implement
> routing stuff (Ipv6L3Protocol), ICMPv6 (and neighbor discovery
> protocol) and wait about transport protocol problem. Now all of us
> interrested in IPv6 can begin to find a nice way to handle transport
> protocol in both IPv4 and IPv6 without copy/paste code. And to finish
> It will be really good if we can put great efforts on IPv6 integration
> for ns-3.6 to bring ns-3 users the power of IPv6 ;)
>
> Regards,
> --
> Seb
>
>> Thanks,
>> Tom
>>
>>
>
>