1bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao/* 2bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * Copyright 2012, The Android Open Source Project 3bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * 4bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 5bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * you may not use this file except in compliance with the License. 6bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * You may obtain a copy of the License at 7bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * 8bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 9bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * 10bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * Unless required by applicable law or agreed to in writing, software 11bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 12bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * See the License for the specific language governing permissions and 14bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao * limitations under the License. 15bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao */ 16bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 17bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao#include <sys/types.h> 18bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao#include <sys/socket.h> 19bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao#include <socket_portable.h> 20bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 21bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 22bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao#if SOL_SOCKET_PORTABLE==SOL_SOCKET 23bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao#error Build environment 24bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao#endif 25bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 26bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liaostatic inline int mips_change_level(int level) 27bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao{ 28bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao switch (level) { 29bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SOL_SOCKET_PORTABLE: 30bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao level = SOL_SOCKET; 31bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao break; 32bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao } 33bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return level; 34bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao} 35bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 36bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 37bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liaostatic inline int mips_change_optname(int optname) 38bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao{ 39bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao switch (optname) { 40bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_DEBUG_PORTABLE: 41bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_DEBUG; 42bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_REUSEADDR_PORTABLE: 43bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_REUSEADDR; 44bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_TYPE_PORTABLE: 45bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_TYPE; 46bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_ERROR_PORTABLE: 47bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_ERROR; 48bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_DONTROUTE_PORTABLE: 49bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_DONTROUTE; 50bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_BROADCAST_PORTABLE: 51bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_BROADCAST; 52bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SNDBUF_PORTABLE: 53bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SNDBUF; 54bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_RCVBUF_PORTABLE: 55bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_RCVBUF; 56bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SNDBUFFORCE_PORTABLE: 57bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SNDBUFFORCE; 58bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_RCVBUFFORCE_PORTABLE: 59bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_RCVBUFFORCE; 60bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_KEEPALIVE_PORTABLE: 61bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_KEEPALIVE; 62bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_OOBINLINE_PORTABLE: 63bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_OOBINLINE; 64bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_NO_CHECK_PORTABLE: 65bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_NO_CHECK; 66bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_PRIORITY_PORTABLE: 67bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_PRIORITY; 68bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_LINGER_PORTABLE: 69bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_LINGER; 70bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_BSDCOMPAT_PORTABLE: 71bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_BSDCOMPAT; 72bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_PASSCRED_PORTABLE: 73bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_PASSCRED; 74bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_PEERCRED_PORTABLE: 75bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_PEERCRED; 76bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_RCVLOWAT_PORTABLE: 77bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_RCVLOWAT; 78bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SNDLOWAT_PORTABLE: 79bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SNDLOWAT; 80bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_RCVTIMEO_PORTABLE: 81bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_RCVTIMEO; 82bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SNDTIMEO_PORTABLE: 83bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SNDTIMEO; 84bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SECURITY_AUTHENTICATION_PORTABLE: 85bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SECURITY_AUTHENTICATION; 86bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SECURITY_ENCRYPTION_TRANSPORT_PORTABLE: 87bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SECURITY_ENCRYPTION_TRANSPORT; 88bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_SECURITY_ENCRYPTION_NETWORK_PORTABLE: 89bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_SECURITY_ENCRYPTION_NETWORK; 90bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_BINDTODEVICE_PORTABLE: 91bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_BINDTODEVICE; 92bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_ATTACH_FILTER_PORTABLE: 93bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_ATTACH_FILTER; 94bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_DETACH_FILTER_PORTABLE: 95bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_DETACH_FILTER; 96bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_PEERNAME_PORTABLE: 97bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_PEERNAME; 98bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_TIMESTAMP_PORTABLE: 99bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_TIMESTAMP; 100bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_ACCEPTCONN_PORTABLE: 101bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_ACCEPTCONN; 102bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_PEERSEC_PORTABLE: 103bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_PEERSEC; 104bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao case SO_PASSSEC_PORTABLE: 105bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return SO_PASSSEC; 106bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao } 107bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return optname; 108bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao} 109bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 110bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liaoextern int setsockopt(int, int, int, const void *, socklen_t); 111bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liaoint setsockopt_portable(int s, int level, int optname, const void *optval, socklen_t optlen) 112bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao{ 113bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return setsockopt(s, mips_change_level(level), mips_change_optname(optname), optval, optlen); 114bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao} 115bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao 116bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liaoextern int getsockopt (int, int, int, void *, socklen_t *); 117bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liaoint getsockopt_portable(int s, int level, int optname, void *optval, socklen_t *optlen) 118bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao{ 119bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao return getsockopt(s, mips_change_level(level), mips_change_optname(optname), optval, optlen); 120bf1b1e6c7f2fb0f912940232c7807506e63df2d2Shih-wei Liao} 121