/* ARGSUSED */ static int sdpfp_getsockopt(sock_lower_handle_t handle, int level, int option_name, void *optval, socklen_t *optlenp, struct cred *cred) { struct pfpsock *ps; int error = 0; ps = (struct pfpsock *)handle; switch (level) { case SOL_PACKET : error = pfp_getpacket_sockopt(handle, option_name, optval, optlenp); break; case SOL_SOCKET : if (option_name == SO_RCVBUF) { if (*optlenp < sizeof (int32_t)) return (EINVAL); *((int32_t *)optval) = ps->ps_rcvbuf; *optlenp = sizeof (int32_t); } else { error = ENOPROTOOPT; } break; default : /* * If sockfs code receives this error in return from the * getsockopt downcall it handles the option locally, if * it can. */ error = ENOPROTOOPT; break; } return (error); }
/* ARGSUSED */ static int sdpfp_getsockopt(sock_lower_handle_t handle, int level, int option_name, void *optval, socklen_t *optlenp, struct cred *cred) { int error = 0; switch (level) { case SOL_PACKET : error = pfp_getpacket_sockopt(handle, option_name, optval, optlenp); break; default : /* * If sockfs code receives this error in return from the * getsockopt downcall it handles the option locally, if * it can. This implements SO_RCVBUF, etc. */ error = ENOPROTOOPT; break; } return (error); }