IP Version 6
Ø Overview
& Concepts (power point)
![]()
struct sockaddr_in6 addr;
socket(AF_INET6, ..);
addr.sin6_family = AF_INET6;
addr.sin6_port = htons(port)
addr.sin6_addr = in6addr_any;
OR
inet_pton(AF_INET6,
“specific_ipv6address”, &addr.sin6_addr);
No changes for other calls: listen,
accept, connect, send, recv, etc.
The following
examples will run perfectly among
antares and capella and procyon:
% hostname
antares
% ifconfig
-a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet
127.0.0.1 netmask ff000000
bge0: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 index 2
inet
128.82.4.98 netmask
fffffe00 broadcast 128.82.5.255
sppp0:
flags=10010008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4,FIXEDMTU>
mtu 1500 index 3
inet
192.168.254.2 --> 192.168.254.1 netmask ffffff00
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
inet6 ::1/128
bge0: flags=202004841<UP,RUNNING,MULTICAST,DHCP,IPv6,CoS> mtu
1500 index 2
inet6 fe80::214:4fff:fe3a:8d85/10
% hostname
capella
% ifconfig
-a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet
127.0.0.1 netmask ff000000
bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu
1500 index 2
inet
128.82.4.118 netmask
fffffe00 broadcast 128.82.5.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
inet6 ::1/128
bge0: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu
1500 index 2
inet6 fe80::221:28ff:fe57:a8/10
% hostname
procyon
% ifconfig
-a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet
127.0.0.1 netmask ff000000
bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu
1500 index 2
inet
128.82.4.170 netmask
fffffe00 broadcast 128.82.5.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
inet6 ::1/128
bge0: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu
1500 index 2
inet6 fe80::221:28ff:fe57:3b8/10
Daytime
Servers and Clients
· Server IPv4: s4
· Server IPv6: s6
· Client IPv4: c4
· Client IPv6: c6
Examples of possible
scenarios:
% cd /home/cs779/stevens3rd.book/unpv13e/intro
Use tcpdump
to observe the exchanged messages (assume you use port 10313):
%
sudo tcpdump -N -t | grep 10313
Run server on host something (assume
IPv4: 128.82.4.210 & IPv6: fe80::203:baff:fe2a:67ff )
% s4 10313&
% c4 128.82.4.210 10313
% c6 fe80::203:baff:fe2a:67ff 10313
connect
error: Connection refused
% c6 ::ffff:128.82.4.210 10313
% s6 10313&
% c4 128.82.4.210 10313
% c6 fe80::203:baff:fe2a:67ff
10313
% c6 ::ffff:128.82.4.210
10313
In general:
For IPv6 client to
talk to IPv4 server it should
use ::ffff:ip4
![]()
Daytime Servers and Clients
Ø Server IPv4: s4u
Ø Server IPv6: s6u
Ø Client IPv4: c4u
Ø Client IPv6: c6u
Examples of possible
scenarios:
Similar to TCP
above
![]()
Daytime Servers and Clients
DayTimeXYSctpZ :
X (Server/Client)
Y (4/6)
Z (S/Q)
ü Server IPv4 Stream: DayTimeServer4SctpS
ü Server IPv6 Stream: DayTimeServer6SctpS
ü Client IPv4 Stream: DayTimeClient4SctpS
ü Client IPv6 Stream: DayTimeClient6SctpS
ü Server IPv4 Sequence Packet: DayTimeServer4SctpQ
ü Server IPv6 Sequence Packet: DayTimeServer6SctpQ
ü Client IPv4 Sequence Packet:
DayTimeClient4SctpQ
ü Client IPv6 Sequence Packet: DayTimeClient6SctpQ
Examples of possible
scenarios
(match 4 servers & 4 clients): 16 cases
ê
Multicast Example
IPv6
multicast addresses starts with ff.
Example: " ff80::203:baff:fe2a:6722"
Also you can use IPv4-mapped IPv6 addresses: ::ffff:224..1.1.22
s = socket(AF_INET6,SOCK_DGRAM, 0);
joinGroup(s,” ::ffff:224..1.1.22 ”);
void joinGroup(int
s, char *group)
{
struct
sockaddr_in6 groupStruct;
struct
ipv6_mreq mreq;
inet_pton(AF_INET6, group, &groupStruct.sin6_addr);
mreq.ipv6mr_multiaddr =
groupStruct.sin6_addr;
mreq.ipv6mr_interface = INADDR_ANY;
setsockopt(s,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,(char *) &mreq, sizeof(mreq));
}
Example:
% cd /home/cs779/public_html/mcast/mcast6
% mchat 0
% cd /home/cs779/public_html/mcast/mcast4
% mchat 0