Lines Matching refs:kctl

77 TAILQ_HEAD(kctl_list, kctl) 	ctl_head;
91 static struct kctl *ctl_find_by_name(const char *);
92 static struct kctl *ctl_find_by_id_unit(u_int32_t id, u_int32_t unit);
94 static struct socket *kcb_find_socket(struct kctl *, u_int32_t unit);
95 static struct ctl_cb *kcb_find(struct kctl *, u_int32_t unit);
255 struct kctl *kctl;
256 if ((kctl = kcb->kctl) != 0) {
258 TAILQ_REMOVE(&kctl->kcb_head, kcb, next);
284 struct kctl *kctl;
299 kctl = ctl_find_by_id_unit(sa.sc_id, sa.sc_unit);
300 if (kctl == NULL) {
305 if (((kctl->flags & CTL_FLAG_REG_SOCK_STREAM) && (so->so_type != SOCK_STREAM)) ||
306 (!(kctl->flags & CTL_FLAG_REG_SOCK_STREAM) && (so->so_type != SOCK_DGRAM))) {
311 if (kctl->flags & CTL_FLAG_PRIVILEGED) {
322 if ((kctl->flags & CTL_FLAG_REG_ID_UNIT) || sa.sc_unit != 0) {
323 if (kcb_find(kctl, sa.sc_unit) != NULL) {
331 TAILQ_FOREACH(kcb_next, &kctl->kcb_head, next) {
350 kcb->kctl = kctl;
355 TAILQ_INSERT_TAIL(&kctl->kcb_head, kcb, next);
359 error = soreserve(so, kctl->sendbufsize, kctl->recvbufsize);
365 error = (*kctl->connect)(kctl, &sa, &kcb->userdata);
373 if (error && kctl->disconnect) {
375 (*kctl->disconnect)(kctl, kcb->unit, kcb->userdata);
382 kcb->kctl = 0;
384 TAILQ_REMOVE(&kctl->kcb_head, kcb, next);
396 struct kctl *kctl = kcb->kctl;
398 if (kctl && kctl->disconnect) {
400 (*kctl->disconnect)(kctl, kcb->unit, kcb->userdata);
408 kcb->kctl = 0;
413 TAILQ_REMOVE(&kctl->kcb_head, kcb, next);
424 struct kctl *kctl;
430 if ((kctl = kcb->kctl) == NULL)
437 sc.sc_id = kctl->id;
452 struct kctl *kctl;
459 if (error == 0 && (kctl = kcb->kctl) == NULL)
462 if (error == 0 && kctl->send) {
464 error = (*kctl->send)(kctl, kcb->unit, kcb->userdata, m, flags);
479 struct kctl *kctl = (struct kctl *)kctlref;
481 if (kctl == NULL)
484 so = kcb_find_socket(kctl, unit);
508 struct kctl *kctl = (struct kctl *)kctlref;
516 so = kcb_find_socket(kctl, unit);
557 struct kctl *kctl = (struct kctl *)kctlref;
564 so = kcb_find_socket(kctl, unit);
579 struct kctl *kctl;
591 if ((kctl = kcb->kctl) == NULL)
596 if (kctl->setopt == NULL)
608 error = (*kctl->setopt)(kcb->kctl, kcb->unit, kcb->userdata, sopt->sopt_name,
616 if (kctl->getopt == NULL)
628 error = (*kctl->getopt)(kcb->kctl, kcb->unit, kcb->userdata, sopt->sopt_name,
632 kcb->kctl->name, len, sopt->sopt_valsize);
656 struct kctl *kctl;
660 TAILQ_FOREACH(kctl, &ctl_head, next)
670 struct kctl *kctl = 0;
681 kctl = ctl_find_by_name(ctl_info.ctl_name);
683 if (kctl == 0) {
687 ctl_info.ctl_id = kctl->id;
706 struct kctl *kctl = NULL;
707 struct kctl *kctl_next = NULL;
719 MALLOC(kctl, struct kctl *, sizeof(*kctl), M_TEMP, M_WAITOK);
720 if (kctl == NULL)
722 bzero((char *)kctl, sizeof(*kctl));
743 FREE(kctl, M_TEMP);
776 kctl->id = id;
777 kctl->reg_unit = -1;
786 FREE(kctl, M_TEMP);
789 kctl->id = userkctl->ctl_id;
790 kctl->reg_unit = userkctl->ctl_unit;
792 strlcpy(kctl->name, userkctl->ctl_name, MAX_KCTL_NAME);
793 kctl->flags = userkctl->ctl_flags;
798 kctl->sendbufsize = userkctl->ctl_sendsize;
802 kctl->recvbufsize = userkctl->ctl_recvsize;
804 kctl->connect = userkctl->ctl_connect;
805 kctl->disconnect = userkctl->ctl_disconnect;
806 kctl->send = userkctl->ctl_send;
807 kctl->setopt = userkctl->ctl_setopt;
808 kctl->getopt = userkctl->ctl_getopt;
810 TAILQ_INIT(&kctl->kcb_head);
813 TAILQ_INSERT_BEFORE(kctl_next, kctl, next);
815 TAILQ_INSERT_TAIL(&ctl_head, kctl, next);
819 *kctlref = kctl;
821 ctl_post_msg(KEV_CTL_REGISTERED, kctl->id);
828 struct kctl *kctl;
834 TAILQ_FOREACH(kctl, &ctl_head, next) {
835 if (kctl == (struct kctl *)kctlref)
838 if (kctl != (struct kctl *)kctlref) {
842 if (!TAILQ_EMPTY(&kctl->kcb_head)) {
847 TAILQ_REMOVE(&ctl_head, kctl, next);
851 ctl_post_msg(KEV_CTL_DEREGISTERED, kctl->id);
852 FREE(kctl, M_TEMP);
859 static struct kctl *
862 struct kctl *kctl;
864 TAILQ_FOREACH(kctl, &ctl_head, next)
865 if (strncmp(kctl->name, name, sizeof(kctl->name)) == 0)
866 return kctl;
877 struct kctl *kctl = ctl_find_by_name(name);
878 if (kctl) ctl_id = kctl->id;
893 struct kctl *kctl;
894 TAILQ_FOREACH(kctl, &ctl_head, next) {
895 if (kctl->id == id)
899 if (kctl && kctl->name)
903 strlcpy(out_name, kctl->name, maxsize);
915 static struct kctl *
918 struct kctl *kctl;
920 TAILQ_FOREACH(kctl, &ctl_head, next) {
921 if (kctl->id == id && (kctl->flags & CTL_FLAG_REG_ID_UNIT) == 0)
922 return kctl;
923 else if (kctl->id == id && kctl->reg_unit == unit)
924 return kctl;
933 kcb_find(struct kctl *kctl, u_int32_t unit)
937 TAILQ_FOREACH(kcb, &kctl->kcb_head, next)
945 kcb_find_socket(struct kctl *kctl, u_int32_t unit)
950 struct ctl_cb *kcb = kcb_find(kctl, unit);
951 if (kcb && kcb->kctl == kctl) {
966 if (kcb->kctl == NULL)