100 likes | 114 Views
This document proposes extensions to the basic socket API to support multi-home functionality in LIN6, a location-independent network architecture for IPv6. The API includes methods for manipulating multiple addresses from a single application node and changing destination/source locators during an established connection.
E N D
Basic Socket API Extensions for LIN6 End-to-End Multi-home - draft-arifumi-lin6-multihome-api-00.txt - Arifumi Matsumoto Kenji Fujikawa Yasuo Okabe Kyoto University, JAPAN July. 14, 2003 IETF 57th
Proposal Overview • E2E multi-home solution in application layer • Multi-home support has to be achieved in transport or upper layers, we believe • Based on a mobile protocol LIN6 for address-aquirement, notification and registration • Based on loc/id(8+8) model for simplicity • Extended Socket API • To manipulate multiple addresses from application
Node Id.(ID) Global Unique Location Id.(Locator) LIN6 What is LIN6 ?/ For what ? • LIN6:Location Independent Network Architecture for IPv6 • 8+8 model: Divide an IPv6 address into 2 parts • Upper 8bytes: Location Id.(Locator) • Lower 8bytes: Node Id.(Identifier) • Identify each connection only by Node Id. • Address-acquirement, notification, registration in a secure manner Node Id.Global unique IPv6 Location Id. 8byte 8byte
E2EMulti-home with LIN6(1/2) • E2E multi-home has an affinity to loc/id • End node knows each other’s locators through LIN6 protocol Loc1:ID-A <->Loc2:ID-B Host-A ISP1 Loc1:ID-A ISP2 Loc2:ID-B Host-B Internet Loc3:ID-B ISP3
Error Message (ICMP Host Un-reach) Dst.Loc2:ID-B Dst. Loc3:ID-B E2EMulti-home with LIN6(2/2) • The mere change of locator can avoid connection down even when a line gets in trouble • Each connection is identified by Id. Host-A ISP1 Dst.= *:ID-B ISP2 Internet Dst.= *:ID-A ISP3 Host-B
What to do ? • Existing Socket APIs cannot handle multiple dst/src addresses for one connection • Prepare APIs to manipulate locators • API to make a multi-home ready socket • API to change dst./src. locator while connection is established • API to get locators of Corresponding Node
APIs for Multi-home • socket(AF_ALIN6) • Make a special socket to handle multiple addresses • LIN6 socket identifies each connection using only lower 8 bytes • getaddrinfo2() • Acquires corresponding node(CN)’s locators • Queries Location Agent and gets CN’s latest locators • getsockopt()/setsockopt() • Get/Change the dst/src locator of a connected socket • When connection error is detected, another locator can be used
struct addrinfo2 { ai_family ai_socktype ai_addr .. ai_ntloc ai_tloc .. } Example Program structaddrinfo2 hints, *res, *res2; getaddrinfo2(“hoge.com”,”http”,&hints,&res); /* get addresses、make connection */ for(con=0;con!=1&&res->ai_next!=NULL; res=res->ai_next) { sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if (res->ai_family == AF_ALIN6) { for (con=0,i=0;i<res->ai_ntloc;i++) if (connect(sock, res->ai_tloc[i], res->ai_addrlen)==0) con = 1; } else { connect(sock, res->ai_addr, res->ai_addrlen)…} } void sig_urg(int signo) { /* error signal handling */ setsockopt(sock,IPPROTO_IPV6,FOREIGNLOCATOR, res->ai_tloc[++i], sizeof(struct lin6_prefix)); …}
Considerations • Our APIs are mainly for active multi-homing applications (for redundancy, load-sharing…) • For TCP, minimal multi-home support can be done in TCP layer automatically (just like SCTP.) • For UDP, multi-home support has to be done in App. layer using our APIs. • As a future work, • We develop multi-home ready TCP. • We’ve developed a running implementation of our APIs • Source will soon be available from http://www.users.kudpc.kyoto-u.ac.jp/~r52801/
MIAKO Project • MIAKO(Mobile Internet Access in KyotO) • http://www.miako.net/ • The World Largest Wireless IPv4/IPv6 dual-stack Access Network • About 200 Access Points • About 4000 Users • IPv6 multi-home support is now in progress • We will really welcome you all to Kyoto!