[vbox-dev] IPv6: One last thing...
grimeton at gmx.net
Fri Aug 31 02:38:40 PDT 2012
I'm nearly done with the implementation of the IPv6 stuff, but I always end up with a problem I'm not able to solve.
After conversion from string to binary (RTNETADDRIPV6) we lose some data that is necessary for the OS to decide which interface to use.
"[2001:db8::1%interface_identifier]:12345" represents a valid IPv6 address as string.
- The address itself can be converted to RTNETADDRIPV6 ("2001:db8::1")
- The port can be converted to uint16_t/uint32_t (12345)
- The interface identifier can't be converted to anything/anywhere.
So what does the interface identifier do?
In IPv6 the recommended way to assign ip addresses to a system is to add the same address to all network interfaces. To be able to select only one interface out of the pool, the OS adds a so called "interface identifier", sometimes referred to as "scope" to the address string. As of now, the interface identifier is not lladdr only.
On Linux the identifier is the interface's name, so this "2001:db8::1%eth0" would be the Linux version.
Windows adds the interface index to the address, so this "2001:db8::1%123" is the Windows version.
Other systems have to be checked.
The problem with this is, that only the application/library that opens the socket should convert the address to binary and then bind to the interface that is named in the "interface identifier". So as long as VBox is not the "low level" - provider, the interface identifier has to be preserved.
At the moment I'm thinking of creating a struct that holds all the necessary information in string representation. As the interface identifier is not transmitted over the wire and can have _ANY_ length with _ANY_ character, the final size of the struct is not known and I'd have to create a struct that holds a pointer to a memory area containing the interface identifier, but I'm not sure.
I'm open for any ideas/suggestions/hints/...
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 4343 bytes
Desc: not available
Url : http://www.virtualbox.org/pipermail/vbox-dev/attachments/20120831/cc182ff4/attachment-0001.bin
More information about the vbox-dev