46
Porting Applications Dr. Tomás P. de Miguel [email protected] Department of Telematic Systems Engineering (DIT) Technical University of Madrid (UPM) Eva M. Castro [email protected] Systems and Communications Group (GSyC) Experimental Sciences and Technology Department (ESCET) Rey Juan Carlos University (URJC)

Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Embed Size (px)

Citation preview

Page 1: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Porting Applications

Dr. Tomás P. de [email protected] of Telematic Systems Engineering (DIT)Technical University of Madrid (UPM)

Eva M. [email protected] and Communications Group (GSyC)Experimental Sciences and Technology Department (ESCET)Rey Juan Carlos University (URJC)

Page 2: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 2

Agenda

• Not change applications, nor kernel.• Porting applications

– Identifying IP version dependencies– Porting source code

• IPv4/IPv6 Interoperability• Recommendations

Page 3: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 3

Analyzing existing applications

BSD sockets interface

Application Level

O.S. Kernel

App1TM

ResolverResolver

TCP UDP UNIX

IPv4

libc

IPv6

Page 4: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 4

Not change applications, nor kernel

BSD sockets interface

Application Level

O.S. Kernel

App1TM

BIA Socket Library BIA Socket Library Addressmapper

RESOLVER CALLS

ResolverResolver

TCP UDP UNIX

IPv4

libc

IPv6

Page 5: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 5

Resolver calls

BSD sockets interface

Application Level

O.S. Kernel

App1TM

BIA Socket Library BIA Socket Library Addressmapper

RESOLVER CALLS

ResolverResolver

TCP UDP UNIX

IPv4

libc

IPv6

Page 6: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 6

IPv4 communication

BSD sockets interface

Application Level

O.S. Kernel

App1TM

BIA Socket Library BIA Socket Library Addressmapper

SOCKET CALLS (Real Address)

ResolverResolver

TCP/UDP UNIX

IPv4

libc

IPv6

Page 7: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 7

IPv6 communication

BSD sockets interface

Application Level

O.S. Kernel

App1TM

BIA Socket Library BIA Socket Library Addressmapper

SOCKET CALLS (BIA Address)

ResolverResolver

UNIX

IPv4

libc

IPv6

TCP/UDP

SOCKET CALLS (Real Address)

Page 8: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 8

Agenda

• Not change applications, nor kernel.• Porting applications

– Identifying IP version dependencies– Porting source code

• IPv4/IPv6 Interoperability• Recommendations

Page 9: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 9

Identifying IP dependencies

1. Network addresses (FQDN & IP address)2. Application transport module

• Data structures• Conversion functions• Socket calls & options• Special addresses• Default address selection

3. ADU Fragmentation4. Register systems based on IP addresses

Page 10: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 10

• Compliant with IPv4/IPv6 address format.– Separator: “.” for IPv4 and “:” for IPv6.

• Ambiguity separating the address and the service port number.– 138.4.2.10:3333

• Recommendations:– Use FQDN.– Use literal IP address (RFC 2373).

• http://[2001:720:1500:1::a100]:80/index.html

1. Network addresses (FQDN & IP address)

Page 11: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 11

2. Application transport module• Data structures• Resolution & conversion functions• Socket calls & options• Special addresses:

– Wildcard Address: INADDR_ANY / IN6ADDR_ANY_INIT

– Loopback Address: INADDR_LOOPBACK / IN6_ADDR_LOOPBACK_INIT

– Broadcast Address: INADDR_BROADCAST / MULTICAST?

• Default address selection (RFC 3484)• Source • Destination

Page 12: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 12

3. ADU fragmentation

Path MTU Discovery

MTU5MTU1

MTU6 MTU7

MTU4

MTU3

Link Layer

SenderApplication

UDP

IPv6

Link Layer

ReceiverApplication

UDP

IPv6

MTU2

MTU1 > MTU2 >Packet Size > MTU3

Page 13: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 13

4. Register Systems

– Problem:• IP address can change over time.

– Solution:• FQDN.• Refresh IP address value.

Group communication is often related to a group membership based on participant registry system.

Page 14: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 14

Agenda

• Not change applications, nor kernel.• Porting applications

– Identifying IP version dependencies– Porting source code

• IPv4/IPv6 Interoperability• Recommendations

Page 15: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 15

Porting source code

1. Porting the application networking part to manage IPv6 addresses. Using socket interface:

� RFC 3493 (Feb 2003): Basic socket interface extensionsfor IPv6 (2553 obsoleted).

� RFC 2292: Advanced sockets API for IPv6.

2. Reengineering the application to use new features in addition to larger address space:

� QoS: Flow labels and priorities.� Anycast communication.� Security: authentication and encryption.� etc.

Page 16: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 16

IPv6 addresses are 128 bit long.

1. Data structures:Socket address struct

3. Socket calls

2. Conversion functions between:• String and bynary representation• Name and address

Changes in the application networking partChanges in the application networking part

BSD socket interface extensions

Page 17: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 17

Family

Data

struct sockaddr {sa_family_t sa_family;char sa_data[14];

};

struct sockaddr {sa_family_t sa_family;char sa_data[14];

};

sockaddr

16 bits

AF_XXXX

Generic socket address

Page 18: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 18

Family

struct sockaddr_in {sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;char sin_zero[8];

};

struct in_addr {uint32_t s_addr;

};

struct sockaddr_in {sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;char sin_zero[8];

};

struct in_addr {uint32_t s_addr;

};

sockaddr_in

Port Number

IPv4 Address(32 bits)

Unused

16 bits

AF_INET

IPv4 socket address structure

Page 19: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 19

Family

struct sockaddr_in6 {sa_family_t sin6_family;in_port_t sin6_port;uint32_t sin6_flowinfo;struct in6_addr sin6_addr;uint32_t sin6_scope_id;

};

struct in6_addr {uint8_t s6_addr[16];

};

struct sockaddr_in6 {sa_family_t sin6_family;in_port_t sin6_port;uint32_t sin6_flowinfo;struct in6_addr sin6_addr;uint32_t sin6_scope_id;

};

struct in6_addr {uint8_t s6_addr[16];

};

sockaddr_in6

Port Number

Flow Info

IPv6 Address(128 bits)

16 bits

AF_INET6

Scope ID

IPv6 socket address structure

Page 20: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 20

Family

struct sockaddr_storage {sa_family_t sin6_family;__ss_aligntype __ss_align;char __ss_padding[_SS_PADSIZE];

};

struct sockaddr_storage {sa_family_t sin6_family;__ss_aligntype __ss_align;char __ss_padding[_SS_PADSIZE];

};

sockaddr_storage

Align (32, 64 bits)

Padding

16 bits

AF_XXXX

Protocol independent structure

Page 21: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 21

Structure Allocation

struct sockaddr_in serverAddr;

/* … */

bind(serverfd, (struct sockaddr *)&serverAddr, &alen);

struct sockaddr_in serverAddr;

/* … */

bind(serverfd, (struct sockaddr *)&serverAddr, &alen);

IPv4-only code

struct sockaddr_in6 serverAddr;

/* … */

bind(serverfd, (struct sockaddr *)&serverAddr, &alen);

struct sockaddr_in6 serverAddr;

/* … */

bind(serverfd, (struct sockaddr *)&serverAddr, &alen);

IPv6-only code

struct sockaddr_storage serverAddr;

/* … */

bind(serverfd, (struct sockaddr *)&serverAddr, &alen);

struct sockaddr_storage serverAddr;

/* … */

bind(serverfd, (struct sockaddr *)&serverAddr, &alen);

Protocol independent code

Page 22: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 22

IPv6 addresses are 128 bit long.

1. Data structures:Socket address struct

3. Socket calls

2. Conversion functions between:• String and bynary representation• Name and address

Changes in the application networking partChanges in the application networking part

BSD socket interface extensions

Page 23: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 23

• RESOLVER: returns IP address structure.

Application code

Resolvercode

Req Resp

Conf Files

Local Name Server

UDP Req

UDP Resp

Application

Conversion functions

Page 24: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 24

getaddrinfo()

getnameinfo()

Conversion: name & IP addr

IPv4 only(v4 addr)

IPv4 & IPv6(v4, v6, v4-map v6 addr)

gethostbyname()

gethostbyaddr()

ProtocolIndependentFunctions

Page 25: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 25

Getaddrinfo* Protocol independent function.

:: 0.0.0.0AF_INET6 AF_INET

res:

struct addrinfo hints, *res;

memset(0, &hints, sizeof(hints);hints.ai_flags = AI_PASSIVE;hints.ai_family = AF_UNSPEC;hints.ai_socktype = SOCK_STREAM; /* SOCK_DGRAM */getaddrinfo(NULL, DAYTIME_PORT, &hints, &res);

/* … */

freeaddrinfo(res);

struct addrinfo hints, *res;

memset(0, &hints, sizeof(hints);hints.ai_flags = AI_PASSIVE;hints.ai_family = AF_UNSPEC;hints.ai_socktype = SOCK_STREAM; /* SOCK_DGRAM */getaddrinfo(NULL, DAYTIME_PORT, &hints, &res);

/* … */

freeaddrinfo(res);

Page 26: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 26

Getnameinfo

struct sockaddr_storage clientAddr;char clientHost[ADDRLEN];char clientPort[PORTLEN];/* … */connectedfd = accept(serverfd,

(struct sockaddr *)&clientAddr,&alen);

getnameinfo((struct sockaddr *)&clientAddr, addrLen,clientHost, sizeof(clientHost),clientPort, sizeof(clientPort),NI_NUMERICHOST);

printf("Request from host=[%s] port=[%s]\n",clienthost, clientservice);

}

struct sockaddr_storage clientAddr;char clientHost[ADDRLEN];char clientPort[PORTLEN];/* … */connectedfd = accept(serverfd,

(struct sockaddr *)&clientAddr,&alen);

getnameinfo((struct sockaddr *)&clientAddr, addrLen,clientHost, sizeof(clientHost),clientPort, sizeof(clientPort),NI_NUMERICHOST);

printf("Request from host=[%s] port=[%s]\n",clienthost, clientservice);

}

* Protocol independent function.

Page 27: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 27

• Conversions between the text representation and thebinary value in network byte ordered (socket addressstructure).

IPv4 only IPv4 & IPv6inet_aton()inet_addr()

inet_ntoa()

inet_pton()

inet_ntop()

String -> Binary

Binary -> String

Conversion: string & binary

Page 28: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 28

inet_pton

struct sockaddr_in6 addr6;

char *addrStr6=“::1”;

/* … */

inet_pton(AF_INET6, addrStr6,&addr6);

struct sockaddr_in6 addr6;

char *addrStr6=“::1”;

/* … */

inet_pton(AF_INET6, addrStr6,&addr6);

IPv6-only codestruct in_addr addr4;char *addrStr4=“127.0.0.1”;

/* … */

inet_aton(addrStr4,&addr4);

struct in_addr addr4;char *addrStr4=“127.0.0.1”;

/* … */

inet_aton(addrStr4,&addr4);

IPv4-only code

struct sockaddr_storage addr;int family = AF_INET6;char *addrStr=“::1”

/* … */

inet_pton(family, addrStr, &addr);

struct sockaddr_storage addr;int family = AF_INET6;char *addrStr=“::1”

/* … */

inet_pton(family, addrStr, &addr);

IPv4/IPv6 code

Page 29: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 29

inet_ntop

struct sockaddr_in6 addr6;

char addrStr6[INET6_ADDRSTRLEN];

/* … */

inet_ntop(AF_INET6, addr6,addrStr6,INET6_ADDRSTRLEN);

struct sockaddr_in6 addr6;

char addrStr6[INET6_ADDRSTRLEN];

/* … */

inet_ntop(AF_INET6, addr6,addrStr6,INET6_ADDRSTRLEN);

New IPv6-only codestruct in_addr addr4;char *addrStr4;

/* … */

addrStr4 = inet_ntoa(addr4);

struct in_addr addr4;char *addrStr4;

/* … */

addrStr4 = inet_ntoa(addr4);

Old IPv4-only code

struct sockaddr_storage addr;char addrStr[ADDRSTRLEN];

/* … */

inet_ntop(addr.ss_family, addr, addrStr, sizeof(addrStr));

struct sockaddr_storage addr;char addrStr[ADDRSTRLEN];

/* … */

inet_ntop(addr.ss_family, addr, addrStr, sizeof(addrStr));

IPv4/IPv6 code

Page 30: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 30

IPv6 addresses are 128 bit long.

1. Data structures:Socket address struct

3. Socket calls

2. Conversion functions between:• String and bynary representation• Name and address

Changes in the application networking partChanges in the application networking part

BSD socket interface extensions

Page 31: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 31

Socket calls (TCP)Server

Clientsocketsocket

bindbind

listenlisten

acceptaccept

readread

writewrite

closeclose

socketsocket

connectconnect

writewrite

readread

closeclose

Page 32: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 32

Socket calls (UDP)Server

Clientsocketsocket

bindbind

recvfromrecvfrom

sendtosendto

closeclose

socketsocket

sendtosendto

recvfromrecvfrom

closeclose

Page 33: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 33

• Address family, socket type and protocol in the socket call:

• Casting to generic socket structure struct sockaddr *.

IPv4: from (struct sockaddr_in *)IPv6: from (struct sockaddr_in6 *)Protocol independent: from (struct sockaddr_storage *)

• Size of socket address structure.

int socket (int family, int type, int protocol);int socket (int family, int type, int protocol);

Same socket calls IPv4 & IPv6

Page 34: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 34

Socket Options (setsockopt)

• IPV6_UNICAST_HOPS• Multicast:

– IPV6_MULTICAST_IF– IPV6_MULTICAST_HOPS– IPV6_MULTICAST_LOOP– IPV6_JOIN_GROUP– IPV6_LEAVE_GROUP

• IPV6_V6ONLY for AF_INET6

Page 35: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 35

Agenda

• Not change applications, nor kernel.• Porting applications

– Identifying IP version dependencies– Porting source code

• IPv4/IPv6 Interoperability• Recommendations

Page 36: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 36

IPv4/IPv6 Interoperability

• Dual stack will be the mechanism used during transition period.

• Not all combinations between IPv4/IPv6 only-nodes and dual stack nodes are allowed to interact.

IPv4

TCP/UDP

Link layer

IPv6

TCP/UDP

Link layer

IPv4

TCP/UDP

Link layer

IPv6

IPv4-only node IPv6-only node Dual stack node

Page 37: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 37

Interoperability cases

1. IPv4 server at IPv4-only node.

2. IPv6 server at IPv6-only node.

3. IPv4 server at dual stack node.

4. IPv6 server at dual stack node.

5. IPv6-only server at dual stack node.

Page 38: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 38

1. IPv4 server at IPv4-only node

IPv4

IPv4clientIPv4client

TCP/UDP

IPv4

IPv4clientIPv4client

TCP/UDP

IPv6

IPv6clientIPv6client

TCP/UDP

IPv6 IPv4

IPv6clientIPv6client

TCP/UDP

IPv6 IPv4

IPv4serverIPv4

server

TCP/UDP

x.y.z.w x.y.z.w

::FFFF:x.y.z.w

x.y.z.w

IPv4

Page 39: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 39

IPv4

IPv4 clientIPv4 client

TCP/UDP

IPv4

IPv4 clientIPv4 client

TCP/UDP

IPv6

IPv6clientIPv6client

TCP/UDP

IPv6 IPv4

IPv6clientIPv6client

TCP/UDP

IPv6 IPv6

IPv6serverIPv6

server

TCP/UDP

x:x:x:x:x:x:x:x

x:x:x:x:x:x:x:xx:x:x:x:x:x:x:x

IPv6

2. IPv6 server at IPv6-only node

Page 40: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 40

3. IPv4 server at dual stack node

IPv4

IPv4clientIPv4client

TCP/UDP

IPv4

IPv4clientIPv4client

TCP/UDP

IPv6

IPv6clientIPv6client

TCP/UDP

IPv6 IPv4

IPv6clientIPv6client

TCP/UDP

IPv6

x.y.z.w x.y.z.w

::FFFF:x.y.z.w

IPv4

IPv4serverIPv4

server

TCP/UDP

IPv6

x.y.z.w

x.y.z.w

IPv4

Page 41: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 41

4. IPv6 server at dual stack node

IPv4

IPv4clientIPv4client

TCP/UDP

IPv4

IPv4clientIPv4client

TCP/UDP

IPv6

IPv6 clientIPv6 client

TCP/UDP

IPv6 IPv4

IPv6clientIPv6client

TCP/UDP

IPv6x.y.z.w x.y.z.w

IPv4

IPv6serverIPv6

server

TCP/UDP

IPv6

x:x:x:x:x:x:x:x

x:x:x:x:x:x:x:xx:x:x:x:x:x:x:x ::FFFF:x.y.z.wx:x:x:x:x:x:x:x

x.y.z.w

IPv6

IPv4

Page 42: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 42

IPv4

IPv4clientIPv4client

TCP/UDP

IPv4

IPv4clientIPv4client

TCP/UDP

IPv6

IPv6clientIPv6client

TCP/UDP

IPv6 IPv4

IPv6clientIPv6client

TCP/UDP

IPv6 IPv4

TCP/UDP

IPv6

x:x:x:x:x:x:x:x

x:x:x:x:x:x:x:xx:x:x:x:x:x:x:x x:x:x:x:x:x:x:x

IPv6

IPv6-only

server

IPv6-only

server

5. IPv6-only servers at dual stack

Page 43: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 43

Client/Server interoperability

* Network is dual if it is necessary

IPv4 serverIPv4 node Dual stack

IPv6 serverIPv6 node Dual stack

IPv4 node

Dual stack

IPv6 node

Dual stack

IPv4IPv4 client

IPv6client

IPv4

IPv4 IPv4

IPv6IPv6

IPv6 IPv6

Page 44: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 44

Client/Server interoperability

* Network is dual if it is necessary

IPv4 server

IPv4 node Dual stack

IPv6 server

IPv6 node Dual stack

IPv4 node

Dual stack

IPv6 node

Dual stack

IPv4IPv4 client

IPv6client

IPv4

IPv4

Fail

IPv4 FailIPv4

IPv4Fail

IPv6IPv6Fail

IPv4

IPv4 IPv6 IPv6

Page 45: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 45

Agenda

• Not change applications, nor kernel.• Porting applications

– Identifying IP version dependencies– Porting source code

• IPv4/IPv6 Interoperability• Recommendations

Page 46: Dr. Tomás P. de Miguel · – Identifying IP version dependencies – Porting source code • IPv4/IPv6 Interoperability • Recommendations. ... Network addresses

Madrid Global IPv6 Summit, May 2003 – Eva M. Castro 46

Recommendations

• Separate application transport module.

• Write protocol independent code (dual app):– struct sockaddr_storage– getaddrinfo/getnameinfo

• Use FQDN instead IP address.

• If IP address needed, refresh periodically.