IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New...

25
IPv6 support for SML/NJ Katsuhiro Ueno [email protected] Japan Advanced Institute of Sience and Technology

Transcript of IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New...

Page 1: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

IPv6 support for SML/NJKatsuhiro Ueno

[email protected]

Japan Advanced Institute of Sience and Technology

Page 2: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Backgrounds

SML/NJ lacks APIs for IPv6 at all

We can’t IPv6 network programming with SML/NJ

↓Need to add IPv6 support to SML/NJ

IPv6 support for SML/NJ – p.1/24

Page 3: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Contents

What is SML/NJ?

Overview of socket implementation in SML/NJ

What I did

Demonstration

Appendix

IPv6 support for SML/NJ – p.2/24

Page 4: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

What is SML/NJ?

IPv6 support for SML/NJ – p.3/24

Page 5: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

What is SML/NJ?

Stands for Standard ML of New Jersey

An implementation of Standard ML

ML is a strongly typed functional programminglanguage

The latest stable version was released onSeptember 2000.

http://www.smlnj.org/

IPv6 support for SML/NJ – p.4/24

Page 6: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Structure of SML/NJ

Runtime System

Compiler

Interactive Interface

Standard ML Basis LibraryBackend

Writtenin ML

Writtenin C

Operating System

Human

SML/NJ

IPv6 support for SML/NJ – p.5/24

Page 7: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Socket implementation in SML/NJ

IPv6 support for SML/NJ – p.6/24

Page 8: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Points to be checked

How to deal with socket APIs in C

How to deal with socket addresses in runtime

Structure of user-level APIs in Basis Library

How to deal with sockets and socket addresses inML

IPv6 support for SML/NJ – p.7/24

Page 9: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

How to deal with socket APIs

Runtime System

Compiler

Interactive Interface

Backend

Writtenin ML

Writtenin C

Operating System

Human

socket(2)

"socket"

wrap simply

bind(2)

"bind"

Standard ML Basis Library

structureSocket

make up a module- define data types- add utility functions

IPv6 support for SML/NJ – p.8/24

Page 10: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

How to deal with socket addresses

Runtime simply maps a sockaddr structure in Cinto an octet array object in ML.

Protocol independent

IPv6 support for SML/NJ – p.9/24

Page 11: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

User-level APIs for socket

Basis Library provides several structures for socket.

Socket structure

INetSock structure

UnixSock structure

GenericSock structure

NetHostDB structure

NetProtDB structure

NetServDB structure

IPv6 support for SML/NJ – p.10/24

Page 12: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Types for socket

Sockets are typed with respect to each combinationof

address family (AF_INET, AF_UNIX, ...),socket type (SOCK_DGRAM, SOCK_STREAM, ...),status of socket (passive, active, ...)

Socket addresses are typed WRT each addressfamily.

↓Inhibits protocol-independent socket programming!

IPv6 support for SML/NJ – p.11/24

Page 13: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Types for socket (cont’d)

� �- let val is = INetSock.TCP.socket()

= val us = UnixSock.DGrm.socket()

= in [is, us] end;

Error: operator and operand don’t agree

operator domain:

’Z INetSock.stream_sock

* ’Z INetSock.stream_sock list

operand:

’Z INetSock.stream_sock

* UnixSock.dgram_sock list� �

IPv6 support for SML/NJ – p.12/24

Page 14: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

What I did

IPv6 support for SML/NJ – p.13/24

Page 15: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

What I did

Design

Implementation

Release and contribution

Making example

IPv6 support for SML/NJ – p.14/24

Page 16: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Summary of design

INet6Sock structureIPv6 specific functionalitiesinet_ntop(3), inet_pton(3), ...

NetAddrDB structureprotocol-independent name resolutionprotocol-independent socket creationgetaddrinfo(3), getnameinfo(3), ...

IPv6 support for SML/NJ – p.15/24

Page 17: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Point of design

Socket of AF_INET6 is typed as’st INet6Sock.sock.

The result of getAddrInfo is typed inprotocol-independent manner.

Defer concrete type generation as long aspossible

Never forget get/setIPV6ONLY

IPv6 support for SML/NJ – p.16/24

Page 18: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Implementation

SML/NJ doesn’t use GNU autoconfCompile with -DIPV6 flag to enable IPv6 support

Absorb subtle difference between implementationsof getaddrinfo

get/setIPV6ONLY never fail even if OS doesn’tprovide it

IPv6 support for SML/NJ – p.17/24

Page 19: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Difference of getaddrinfo(3)

If AI_CANONNAME is specified,

set same string as given hostname toai_canonname (RFC3493, KAME, Solaris)

do reverse resolution (glibc, old KAME)

set NULL to ai_canonname if resolution is failed

fill all ai_canonname fields (KAME)

not fill all ai_canonname fields (RFC3493, Darwin)

↓Make sure all ai_canonname are filled

IPv6 support for SML/NJ – p.18/24

Page 20: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Release and contribution

You can obtain all materials from:http://www.jaist.ac.jp/~katsuu/smlnj-ipv6/

IPv6 support for SML/NJ – p.19/24

Page 21: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Example

Simple HTTP server written in Standard ML

create IPv4 and IPv6 socket separately

use select(2) to deal with two passive sockets

Be careful for types of sockets!

IPv6 support for SML/NJ – p.20/24

Page 22: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Demonstration

IPv6 support for SML/NJ – p.21/24

Page 23: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Appendix

IPv6 support for SML/NJ – p.22/24

Page 24: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Bugs of Mac OS X 10.3

getnameinfo(3) fails when translating specificport into service name

inet_ntop(3) may cause buffer overflow

↓I sent reports with bugfix patches to Apple

(Problem ID #3973768, #3972456)

IPv6 support for SML/NJ – p.23/24

Page 25: IPv6 support for SML/NJkatsuu/smlnj-ipv6/slide-smlnj-ipv6.pdf · Stands for Standard ML of New Jersey An implementation of Standard ML ML is a strongly typed functional programming

Thank you for listening.

IPv6 support for SML/NJ – p.24/24