IP Version 6

 

 

Ø Overview & Concepts (power point)

Ø Major Programming Changes

Ø TCP Unicast Examples

Ø UDP Unicast Examples

Ø Sctp Examples

Ø Multicast Example

 

 

 

 


ê   Major Programming Changes

 

       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

 

 

ê   TCP Unicast Examples

 

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

 

 

 



ê   UDP Unicast Examples

 

Daytime Servers and Clients

 

Ø Server IPv4:  s4u

Ø Server IPv6:  s6u

Ø Client IPv4:   c4u

Ø Client IPv6:   c6u

 

Examples of possible  scenarios:

Similar to TCP above



ê   Sctp Examples

 

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

  mcast6

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