16f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* SCTP kernel Implementation: User API extensions.
289de9aa86469604a61fb72f8073f984442b8c011uid *
389de9aa86469604a61fb72f8073f984442b8c011uid * opt_info.c
489de9aa86469604a61fb72f8073f984442b8c011uid *
589de9aa86469604a61fb72f8073f984442b8c011uid * Distributed under the terms of the LGPL v2.1 as described in
66f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu *    http://www.gnu.org/copyleft/lesser.txt
789de9aa86469604a61fb72f8073f984442b8c011uid *
889de9aa86469604a61fb72f8073f984442b8c011uid * This file is part of the user library that offers support for the
96f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * SCTP kernel Implementation. The main purpose of this
1089de9aa86469604a61fb72f8073f984442b8c011uid * code if to provide the SCTP Socket API mappings for user
1189de9aa86469604a61fb72f8073f984442b8c011uid * application to interface with the SCTP in kernel.
1289de9aa86469604a61fb72f8073f984442b8c011uid *
1389de9aa86469604a61fb72f8073f984442b8c011uid * This implementation is based on the Socket API Extensions for SCTP
1464a341fc42c967890a9fb5d8855568e23104bef6mridge * defined in <draft-ietf-tsvwg-sctpsocket-10.txt.
1589de9aa86469604a61fb72f8073f984442b8c011uid *
1689de9aa86469604a61fb72f8073f984442b8c011uid * (C) Copyright IBM Corp. 2003
1789de9aa86469604a61fb72f8073f984442b8c011uid * Copyright (c) 2002 Intel Corporation.
1889de9aa86469604a61fb72f8073f984442b8c011uid *
1989de9aa86469604a61fb72f8073f984442b8c011uid * Written or modified by:
2089de9aa86469604a61fb72f8073f984442b8c011uid *   Ardelle Fan <ardelle.fan@intel.com>
2189de9aa86469604a61fb72f8073f984442b8c011uid */
2289de9aa86469604a61fb72f8073f984442b8c011uid
236f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#include <sys/socket.h>   /* struct sockaddr_storage, setsockopt() */
246f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#include <netinet/sctp.h> /* SCTP_SOCKOPT_BINDX_* */
2589de9aa86469604a61fb72f8073f984442b8c011uid#include <errno.h>
2689de9aa86469604a61fb72f8073f984442b8c011uid
2789de9aa86469604a61fb72f8073f984442b8c011uid/* Support the sctp_opt_info() interface.
2889de9aa86469604a61fb72f8073f984442b8c011uid *
2989de9aa86469604a61fb72f8073f984442b8c011uid * See Sockets API Extensions for SCTP. Section 7.
3089de9aa86469604a61fb72f8073f984442b8c011uid *
3189de9aa86469604a61fb72f8073f984442b8c011uid * Pass sctp option information pass both in to and out of the SCTP stack.
3289de9aa86469604a61fb72f8073f984442b8c011uid * This is a new SCTP API described in the section 7 of the Sockets API
3389de9aa86469604a61fb72f8073f984442b8c011uid * Extensions for SCTP. This is implemented using the getsockopt() interface.
3489de9aa86469604a61fb72f8073f984442b8c011uid */
356f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuint
366f22494d19b605ded308dc0fa713e91cb873f44aSimon Xusctp_opt_info(int sd, sctp_assoc_t id, int opt, void *arg, socklen_t *size)
3789de9aa86469604a61fb72f8073f984442b8c011uid{
3889de9aa86469604a61fb72f8073f984442b8c011uid	switch (opt) {
3989de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_RTOINFO:
4089de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_ASSOCINFO:
4189de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_INITMSG:
4289de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_NODELAY:
4389de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_AUTOCLOSE:
4489de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_PRIMARY_ADDR:
4589de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_DISABLE_FRAGMENTS:
4689de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_PEER_ADDR_PARAMS:
4789de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_DEFAULT_SEND_PARAM:
4889de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_EVENTS:
4989de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_I_WANT_MAPPED_V4_ADDR:
5089de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_MAXSEG:
5189de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_STATUS:
5289de9aa86469604a61fb72f8073f984442b8c011uid	case SCTP_GET_PEER_ADDR_INFO:
536f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	case SCTP_AUTH_ACTIVE_KEY:
546f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	case SCTP_PEER_AUTH_CHUNKS:
556f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu	case SCTP_LOCAL_AUTH_CHUNKS:
566f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu		*(sctp_assoc_t *)arg = id;
5789de9aa86469604a61fb72f8073f984442b8c011uid		return getsockopt(sd, IPPROTO_SCTP, opt, arg, size);
5889de9aa86469604a61fb72f8073f984442b8c011uid	default:
5989de9aa86469604a61fb72f8073f984442b8c011uid		return ENOTSUP;
6089de9aa86469604a61fb72f8073f984442b8c011uid	}
6189de9aa86469604a61fb72f8073f984442b8c011uid
626f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu} /* sctp_opt_info() */
63