Lines Matching refs:nlh

140 ynl_ext_ack_check(struct ynl_sock *ys, const struct nlmsghdr *nlh,  in ynl_ext_ack_check()  argument
149 if (!(nlh->nlmsg_flags & NLM_F_ACK_TLVS)) { in ynl_ext_ack_check()
154 ynl_attr_for_each(attr, nlh, hlen) { in ynl_ext_ack_check()
194 start = ynl_nlmsg_data_offset(ys->nlh, ys->family->hdr_len); in ynl_ext_ack_check()
195 end = ynl_nlmsg_end_addr(ys->nlh); in ynl_ext_ack_check()
219 start = ynl_nlmsg_data_offset(ys->nlh, ys->family->hdr_len); in ynl_ext_ack_check()
220 end = ynl_nlmsg_end_addr(ys->nlh); in ynl_ext_ack_check()
260 ynl_cb_error(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) in ynl_cb_error() argument
262 const struct nlmsgerr *err = ynl_nlmsg_data(nlh); in ynl_cb_error()
271 if (!(nlh->nlmsg_flags & NLM_F_CAPPED)) in ynl_cb_error()
274 ynl_ext_ack_check(yarg->ys, nlh, hlen); in ynl_cb_error()
279 static int ynl_cb_done(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) in ynl_cb_done() argument
283 err = *(int *)NLMSG_DATA(nlh); in ynl_cb_done()
288 ynl_ext_ack_check(yarg->ys, nlh, sizeof(int)); in ynl_cb_done()
398 struct nlmsghdr *nlh; in ynl_msg_start() local
402 nlh = ys->nlh = ynl_nlmsg_put_header(ys->tx_buf); in ynl_msg_start()
403 nlh->nlmsg_type = id; in ynl_msg_start()
404 nlh->nlmsg_flags = flags; in ynl_msg_start()
405 nlh->nlmsg_seq = ++ys->seq; in ynl_msg_start()
411 nlh->nlmsg_pid = YNL_SOCKET_BUFFER_SIZE; in ynl_msg_start()
413 return nlh; in ynl_msg_start()
416 static int ynl_msg_end(struct ynl_sock *ys, struct nlmsghdr *nlh) in ynl_msg_end() argument
419 if (nlh->nlmsg_pid == 0) { in ynl_msg_end()
424 if (nlh->nlmsg_pid == YNL_MSG_OVERFLOW) { in ynl_msg_end()
430 nlh->nlmsg_pid = 0; in ynl_msg_end()
439 struct nlmsghdr *nlh; in ynl_gemsg_start() local
442 nlh = ynl_msg_start(ys, id, flags); in ynl_gemsg_start()
448 data = ynl_nlmsg_put_extra_header(nlh, sizeof(gehdr)); in ynl_gemsg_start()
451 return nlh; in ynl_gemsg_start()
477 static int ynl_cb_null(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) in ynl_cb_null() argument
489 const struct nlmsghdr *nlh; in __ynl_sock_read_msgs() local
501 for (rem = len; rem > 0; NLMSG_NEXT(nlh, rem)) { in __ynl_sock_read_msgs()
502 nlh = (struct nlmsghdr *)&ys->rx_buf[len - rem]; in __ynl_sock_read_msgs()
503 if (!NLMSG_OK(nlh, rem)) { in __ynl_sock_read_msgs()
509 if (nlh->nlmsg_flags & NLM_F_DUMP_INTR) { in __ynl_sock_read_msgs()
516 switch (nlh->nlmsg_type) { in __ynl_sock_read_msgs()
526 ret = ynl_cb_error(nlh, yarg); in __ynl_sock_read_msgs()
529 ret = ynl_cb_done(nlh, yarg); in __ynl_sock_read_msgs()
532 ret = cb(nlh, yarg); in __ynl_sock_read_msgs()
595 ynl_get_family_info_cb(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) in ynl_get_family_info_cb() argument
601 ynl_attr_for_each(attr, nlh, sizeof(struct genlmsghdr)) { in ynl_get_family_info_cb()
628 struct nlmsghdr *nlh; in ynl_sock_read_family() local
631 nlh = ynl_gemsg_start_req(ys, GENL_ID_CTRL, CTRL_CMD_GETFAMILY, 1); in ynl_sock_read_family()
632 ynl_attr_put_str(nlh, CTRL_ATTR_FAMILY_NAME, family_name); in ynl_sock_read_family()
634 err = ynl_msg_end(ys, nlh); in ynl_sock_read_family()
638 err = send(ys->socket, nlh, nlh->nlmsg_len, 0); in ynl_sock_read_family()
789 static int ynl_ntf_parse(struct ynl_sock *ys, const struct nlmsghdr *nlh) in ynl_ntf_parse() argument
797 gehdr = ynl_nlmsg_data(nlh); in ynl_ntf_parse()
809 ret = info->cb(nlh, &yarg); in ynl_ntf_parse()
813 rsp->family = nlh->nlmsg_type; in ynl_ntf_parse()
827 ynl_ntf_trampoline(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) in ynl_ntf_trampoline() argument
829 return ynl_ntf_parse(yarg->ys, nlh); in ynl_ntf_trampoline()
864 ynl_check_alien(struct ynl_sock *ys, const struct nlmsghdr *nlh, __u32 rsp_cmd) in ynl_check_alien() argument
868 if (ynl_nlmsg_data_len(nlh) < sizeof(*gehdr)) { in ynl_check_alien()
874 gehdr = ynl_nlmsg_data(nlh); in ynl_check_alien()
876 return ynl_ntf_parse(ys, nlh); in ynl_check_alien()
882 int ynl_req_trampoline(const struct nlmsghdr *nlh, struct ynl_parse_arg *yarg) in ynl_req_trampoline() argument
887 ret = ynl_check_alien(yrs->yarg.ys, nlh, yrs->rsp_cmd); in ynl_req_trampoline()
891 return yrs->cb(nlh, &yrs->yarg); in ynl_req_trampoline()
915 ynl_dump_trampoline(const struct nlmsghdr *nlh, struct ynl_parse_arg *data) in ynl_dump_trampoline() argument
922 ret = ynl_check_alien(ds->yarg.ys, nlh, ds->rsp_cmd); in ynl_dump_trampoline()
939 return ds->cb(nlh, &yarg); in ynl_dump_trampoline()