Internet DRAFT - draft-liu-mif-socket-api
draft-liu-mif-socket-api
MIF D. Liu
Internet-Draft July 5, 2015
Intended status: Informational
Expires: January 6, 2016
Socket API Extension for MIF PvD Architecture
draft-liu-mif-socket-api-00
Abstract
IETF MIF working group defines the multiple provisioning domain
architecture. This document proposes API extension for the PvD-aware
node to support the MIF PvD architecture.
Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 6, 2016.
Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
Liu Expires January 6, 2016 [Page 1]
Internet-Draft Abbreviated-Title July 2015
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Current PvD-related API implementation . . . . . . . . . . . 2
2.1. PvD-related API Implementation in Socket API . . . . . . 2
3. Extension for PvD advanced API . . . . . . . . . . . . . . . 3
3.1. Get PvD Configuration API . . . . . . . . . . . . . . . . 4
3.2. Set PvD API . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. DNS Resolution . . . . . . . . . . . . . . . . . . . . . 5
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5
5. Security Considerations . . . . . . . . . . . . . . . . . . . 5
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 6
7. Normative References . . . . . . . . . . . . . . . . . . . . 6
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6
1. Introduction
IETF MIF working group defines the multiple provisioning domain
architecture in draft-ietf-mif-mpvd-arch-10 [mpvd-architecture] . It
defines three levels of PvD support in API: basic, intermediate and
advanced. This document discusses the advanced PvD API for the PvD-
aware node.
2. Current PvD-related API implementation
This section summarize the PvD related API implementations. The
purpose of this section is to help analyzing the extension of current
API implementation to support PvD architecture.
2.1. PvD-related API Implementation in Socket API
The basic socket API includes the following:
Socket API for a typical server:
o socket()
o bind()
o listen()
o recvmsg()
Liu Expires January 6, 2016 [Page 2]
Internet-Draft Abbreviated-Title July 2015
o sendmsg()
o close()
Socket API for a typical client:
o socket()
o connect()
o sendmsg()
o recvmsg()
o close()
[RFC3493] extends the basic socket API to support IPv6. It defines
the IPv6 Address Family and Protocol Family and also the socket
address structure, socket options etc.
[RFC3542] defines the advanced sockets API for IPv6. It defines the
socket API to access IPv6 specific parameters. For example, the IPv6
raw socket, the API to access IPv6 and extension headers etc.
[RFC5014] defines the IPv6 socket API extension for source address
selection. It can be used to override the default source address
selection method as defined in [RFC3484] . It defines an address
preference flags that used for the source address selection.
Developers can use this API to explicitly specify the source address
to be used in the communication. Example of use cases of this source
address selection API includes applications that supporting Mobile
IPv6, IPv6 Privacy Extensions, Cryptographically Generated Addresses
etc. It uses per-socket and per-packet flags to implement the source
address selection. It adds a new socket option at the IPPROTO_IPV6
level. The new option is called IPV6_ADDR_PREFERENCES. It can be
used with setsockopt() and getsockopt() calls to set and get the
address selection preferences affecting all packets sent via a given
socket.
3. Extension for PvD advanced API
This section defines the extension of socket API to support PvD
architecture as defined in [mpvd-architecture]
It belongs to the advanced PvD API discussed in section 6.3 of
[mpvd-architecture]. The extension proposed in this document has the
following types of API extension:
Liu Expires January 6, 2016 [Page 3]
Internet-Draft Abbreviated-Title July 2015
o API to get current PvDs that been provided to the node
o API to explicitly select a PvD
o API for DNS resolution
There are different design alternatives for the PvD API. Including:
o Get PvDs and select PvD per-socket.
o Get PvDs and select PvD per-application.
o Get PvDs and select PvD per-node.
This document propose the per-socket approach since it can provide
the maximal flexibility for the application developers to meet all
the kinds of use cases.
3.1. Get PvD Configuration API
The following API is used to get the current PvD configuration of the
node:
o getpvdinfo()
The definition of this API is:
int getpvdinfo(const char *nodename, const char *servname, struct
pvdinfo **res);
The structure of struct pvdinfo is:
struct pvdinfo {
int sockaddr * ai_addr;
int sockaddr * gateway_addr;
int sockaddr * dns_addr;
struct addrinfo * ai_next;
}
The definition of parameters is as follows:
o nodename and servname: The nodename and servname parameter are
pointers to null-terminated strings or NULL. One or both of these
Liu Expires January 6, 2016 [Page 4]
Internet-Draft Abbreviated-Title July 2015
parameter must be a non-null pinter. A non-null nodename string
can be a node name or a numeric host address string.
o res: The pvdinfo structure. The result is pointed to res
structure.
3.2. Set PvD API
The following API is used to select the specific PvD.
o setsockopt()
setsockopt(int s, struct * pvdinfo pvd)
The struct * pvdinfo pvd is a new parameter that used to specify the
preferred PvD. The socket can be set to use the PvD that specified
by pvdinfo parameter.
All the socket related operation will be bind to this PvD. For
example, The connect() API call should use the set of configuration
parameters that contained in the pvdinfo (source address, gateway and
DNS etc).
3.3. DNS Resolution
getaddrinfo() is the socket API used to resolve the IPv4 and IPv6
address. This document proposes to extend getaddrinfo() socket API
to allow it use PvD information as a parameter for DNS resolution.
int getaddrinfo( const char * hostname, const char * service, const
struct addrinfo * hints,struct * pvdinfo pvd, struct addrinfo **
result );
The DNS resolution should use the DNS server that contained in the
PvD parameter.
4. IANA Considerations
This document makes no request of IANA.
5. Security Considerations
TBD.
Liu Expires January 6, 2016 [Page 5]
Internet-Draft Abbreviated-Title July 2015
6. Acknowledgements
The author would like to thank the PvD API design team.
7. Normative References
[mpvd-architecture]
Anipko, D., "Multiple Provisioning Domain Architecture",
February 2015.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3484] Draves, R., "Default Address Selection for Internet
Protocol version 6 (IPv6)", February 2003.
[RFC3493] Gilligan, R., "Basic Socket Interface Extensions for
IPv6", February 2003.
[RFC3542] Stevens, W., "Advanced Sockets Application Program
Interface (API) for IPv6", May 2003.
[RFC5014] Nordmark, E., "IPv6 Socket API for Source Address
Selection", September 2007.
Author's Address
Dapeng Liu
Email: maxpassion@gmail.com
Liu Expires January 6, 2016 [Page 6]