-
-/*ARGSUSED*/
-soioctl(so, cmd, data)
- register struct socket *so;
- int cmd;
- register char *data;
-{
-
- switch (cmd) {
-
- case FIONBIO:
- if (*(int *)data)
- so->so_state |= SS_NBIO;
- else
- so->so_state &= ~SS_NBIO;
- break;
-
- case FIOASYNC:
- if (*(int *)data)
- so->so_state |= SS_ASYNC;
- else
- so->so_state &= ~SS_ASYNC;
- break;
-
- case SIOCSPGRP:
- so->so_pgrp = *(int *)data;
- break;
-
- case SIOCGPGRP:
- *(int *)data = so->so_pgrp;
- break;
-
- case SIOCATMARK:
- *(int *)data = (so->so_state&SS_RCVATMARK) != 0;
- break;
-
- /* routing table update calls */
- case SIOCADDRT:
- case SIOCDELRT:
- if (!suser())
- return (u.u_error);
- return (rtrequest(cmd, (struct rtentry *)data));
-
- /* interface parameter requests */
- case SIOCSIFADDR:
- case SIOCSIFFLAGS:
- case SIOCSIFDSTADDR:
- if (!suser())
- return (u.u_error);
- return (ifrequest(cmd, data));
-
- case SIOCGIFADDR:
- case SIOCGIFFLAGS:
- case SIOCGIFDSTADDR:
- return (ifrequest(cmd, data));
-
- case SIOCGIFCONF:
- return (ifconf(cmd, data));
-
- /* type/protocol specific ioctls */
- default:
- return (ENOTTY); /* XXX */
- }
- return (0);
-}