rem: if (level != SOL_SOCKET) {
add: if (level != (int) SOL_SOCKET) {
context: int socket_setsockopt(struct socket *so, int level, int optnum, const void *data, size_t datalen){	struct mbuf *m, *m0;	int error = 0;	m = m_get(MT_SOOPTS);	if (!m)		return ENOMEM;	if (memcpy(mtod(m, void*), data, datalen) == NULL)		return ENOMEM;	m->m_len = datalen;	m0 = m;		if (level != SOL_SOCKET) {		if (so->so_proto && so->so_proto->pr_ctloutput)			return (*so->so_proto->pr_ctloutput)(PRCO_SETOPT, so, level, optnum, &m0);		error = ENOPROTOOPT;	} else {		switch (optnum) {			case SO_LINGER:				if (datalen != sizeof(struct linger)) {					error = EINVAL;					goto bad;				}				so->so_linger = mtod(m, struct linger*)->l_linger;				/* fall thru... */			case SO_DEBUG:			case SO_KEEPALIVE:			case SO_DONTROUTE:			case SO_USELOOPBACK:			case SO_BROADCAST:			case SO_REUSEADDR:			case SO_REUSEPORT:			case SO_OOBINLINE:			case SO_NONBLOCK:				if (datalen < sizeof(int)) {					error = EINVAL;					goto bad;				}				if (*mtod(m, int*))					so->so_options |= optnum;				else					so->so_options &= ~optnum;				break;			case SO_SNDBUF:			case SO_RCVBUF:			case SO_SNDLOWAT:			case SO_RCVLOWAT:				if (datalen < sizeof(int)) {					error = EINVAL;					goto bad;				}				switch (optnum) {					case SO_SNDBUF:					case SO_RCVBUF:						if (sockbuf_reserve(optnum == SO_SNDBUF ? &so->so_snd : &so->so_rcv,						              (uint32)*mtod(m, int32*)) == 0) {							error = ENOBUFS;							goto bad;						}						break;					case SO_SNDLOWAT:						so->so_snd.sb_lowat = *mtod(m, int*);						break;					case SO_RCVLOWAT:						so->so_rcv.sb_lowat = *mtod(m, int*);						break;				}				break;			case SO_SNDTIMEO:			case SO_RCVTIMEO: 			/* bsd has the timeouts as int16, we're using int32... */			{				struct timeval *tv;				int32 val;								if (datalen < sizeof(*tv)) {					error = EINVAL;					goto bad;				}				tv = mtod(m, struct timeval *);				val = tv->tv_sec * 1000000 + tv->tv_usec;				switch (optnum) {					case SO_SNDTIMEO:						so->so_snd.sb_timeo = val;						break;					case SO_RCVTIMEO:						so->so_rcv.sb_timeo = val;						break;				}				break;			}				default:				error = ENOPROTOOPT;		}		if (error == 0 && so->so_proto && so->so_proto->pr_ctloutput) {			(*so->so_proto->pr_ctloutput)(PRCO_SETOPT, so, level, optnum, &m0);			m = NULL;		}	}bad:	if (m)		m_free(m);		return error;}