Upload
anabel-shields
View
216
Download
1
Embed Size (px)
Citation preview
API Extension Discussion for MIF-enabled Hosts
IETF#77
Dapeng Liu, Zhen Cao
Background
• There are API extension works going on in IETF– IPv6– MPTCP– SHIM6– HIP
Background-IPv6
• Basic Socket Interface Extensions for IPv6– RFC3493
• Objective– Support IPv6
• Extensions– IPv6 Address Family and Protocol Family
• AF_INET6/PF_INET6• IPv6 address structure• IPv6 Socket address structure
– Socket Functions• s = socket(AF_INET6, SOCK_STREAM, 0); • s = socket(AF_INET6, SOCK_DGRAM, 0);
Background-MPTCP• MPTCP Application Considerations
– draft-scharf-mptcp-api-00
• Motivation– Define extended API for applications to exploit additional
features of multipath transport.– Optional extension that provides access to multipath
information and enables control over the usage of multipath.
• Specification of API Extensions for MPTCP:– New options that defined at TCP level(IPPROTO_TCP), used by
getsockopt()/setsockopt()• TCP_MP_ENABLE: Enable/disable MPTCP• TCP_MP_SUBFLOWS: Get the addresses currently used by the MPTCP
subflows• TCP_MP_PROFILE: Get/set the MPTCP profile
Background-SHIM6• Socket Application Program Interface (API) for Multihoming
Shim– draft-ietf-shim6-multihome-shim-api-12
• Objective– The API aims to enable interactions between applications and the multihoming
shim layer for advanced locator management, and access to information about failure detection and path exploration.
• Extensions focus on– Turn on/off shim
– Locator management
– Notification from application to the shim sub-layer about the status of the communication
– Feedback from applications to the shim sub-layer
– Hot-standy
– Providing locator information to the applications
SHIM6 (cont.)• Socket Options Extensions
– Used for getsockopt()/setsockopt()
……
Background-HIP
• Basic Socket Interface Extensions for Host Identity Protocol– draft-ietf-hip-native-api-12
• Goals– The first goal is to allow HIP-aware applications to open sockets to
other hosts based on the HITs alone – The second goal is that applications can explicitly initiate
communications with unknown peer identifiers
• The Extensions focus on– The use of public-key based identifiers discovered via DNS resolution– Interfaces for manual bindings between HITs and locators
HIP (cont.)• Socket Family and Address Structure Extensions
– New protocol family/new address family• PF_HIP/AF_HIP
– Socket structure for HIP #include <netinet/hip.h>
typedef struct in6_addr hip_hit_t;
struct sockaddr_hip {
uint8_t ship_len;
sa_family_t ship_family;
in_port_t ship_port;
uint32_t ship_flags;
hip_hit_t ship_hit;
};
• Extensions to Resolver Data Structures #include <netdb.h> #include <netdb.h>
int getaddrinfo (const char *nodename, struct addrinfo {
const char * servname, int ai_flags; /* e.g. AI_CANONNAME*/
const struct addrinfo *hints, int ai_family; /*e.g. AF_HIP*/
struct addrinfo **res) int ai_protocol; /*e.g. SOCK_STREAM*/
void free_addrinfo (struct addrinfo *res) socklen_t ai_addrlen;
struct sockaddr *ai_addr;
char * ai_canonname;
struct addrinfo *ai_next;
int ai_eflags;
};
HIP (cont.)• Explicit Handling of Locators
– Application first creates a socket with AF_HIP as the domain argument.– Second, the application may get or set locator information with one of
the following shim socket options as defined in the multihoming extensions in [I-D.ietf-shim6-multihome-shim-api].
MIF API Extensions• Motivation
– For the application to utilize the benefits from multiple interfaces in a smooth way, there should be some socket API exported to the upper layer.
• Extensions may focus on– Use extended API to solve the problems that caused by
multiple connections• Name and addressing/Routing/Address selection/Configuration
polices…
Requirement
• R1: Compatible with existing Socket APIs• R2: Support for Multiple Connections• R3: No Changes to Existing Socket APIs• R4: Easy for Implementation
Tentative Way • Generic Connection approach
– Application bind to this generic connection– Generic Connection manages the multiple
interfaces/domains• Control which interfaces/routes/address/domain to use
– Extend Data Structure/ Provides API to application layer
struct GenericConnection { struct GenericConnection *next; int index; struct Netdevice *dev; int priority; char status; struct socket *sock;
}
Data Structure of Generic Connection
Thanks
• Question or Comments?