Lines Matching refs:sopt

90 static int ndrv_setspec(struct ndrv_cb *np, struct sockopt *sopt);
94 static int ndrv_do_add_multicast(struct ndrv_cb *np, struct sockopt *sopt);
95 static int ndrv_do_remove_multicast(struct ndrv_cb *np, struct sockopt *sopt);
494 ndrv_ctloutput(struct socket *so, struct sockopt *sopt)
499 switch(sopt->sopt_name)
503 if (sopt->sopt_val != 0 || sopt->sopt_valsize != 0) {
513 error = ndrv_setspec(np, sopt);
516 error = ndrv_do_add_multicast(np, sopt);
519 error = ndrv_do_remove_multicast(np, sopt);
525 log(LOG_WARNING, "NDRV CTLOUT: %x returns %d\n", sopt->sopt_name,
658 ndrv_setspec(struct ndrv_cb *np, struct sockopt *sopt)
674 if (proc_is64bit(sopt->sopt_p)) {
677 if (sopt->sopt_valsize != sizeof(ndrvSpec64))
680 error = sooptcopyin(sopt, &ndrvSpec64, sizeof(ndrvSpec64), sizeof(ndrvSpec64));
693 if (sopt->sopt_valsize != sizeof(ndrvSpec32))
696 error = sooptcopyin(sopt, &ndrvSpec32, sizeof(ndrvSpec32), sizeof(ndrvSpec32));
886 ndrv_do_add_multicast(struct ndrv_cb *np, struct sockopt *sopt)
891 if (sopt->sopt_val == 0 || sopt->sopt_valsize < 2 ||
892 sopt->sopt_level != SOL_NDRVPROTO || sopt->sopt_valsize > SOCK_MAXADDRLEN)
901 sizeof(struct sockaddr) + sopt->sopt_valsize, M_IFADDR, M_WAITOK);
906 result = copyin(sopt->sopt_val, &ndrv_multi->addr, sopt->sopt_valsize);
909 if (result == 0 && sopt->sopt_valsize != ndrv_multi->addr.sa_len)
939 ndrv_do_remove_multicast(struct ndrv_cb *np, struct sockopt *sopt)
945 if (sopt->sopt_val == 0 || sopt->sopt_valsize < 2 ||
946 sopt->sopt_level != SOL_NDRVPROTO)
952 MALLOC(multi_addr, struct sockaddr*, sopt->sopt_valsize,
958 result = copyin(sopt->sopt_val, multi_addr, sopt->sopt_valsize);
961 if (result == 0 && sopt->sopt_valsize != multi_addr->sa_len)