Lines Matching refs:nla
82 nlmsg_report_cookie(struct nl_pstate *npt, struct nlattr *nla)
84 MPASS(nla->nla_type == NLMSGERR_ATTR_COOKIE);
85 MPASS(nla->nla_len >= sizeof(struct nlattr));
86 npt->cookie = nla;
92 struct nlattr *nla = npt_alloc(npt, sizeof(*nla) + sizeof(uint32_t));
94 nla->nla_type = NLMSGERR_ATTR_COOKIE;
95 nla->nla_len = sizeof(*nla) + sizeof(uint32_t);
96 memcpy(nla + 1, &val, sizeof(uint32_t));
97 nlmsg_report_cookie(npt, nla);
130 struct nlattr *nla;
136 NLA_FOREACH(nla, nla_head, len) {
138 nla, nla->nla_type, nla->nla_len, len);
139 if (nla->nla_len < sizeof(struct nlattr)) {
142 nla, nla->nla_type, nla->nla_len);
143 off = (char *)nla - (char *)npt->hdr;
148 s = search_states(ps, pslen, nla->nla_type & NLA_TYPE_MASK);
153 error = s->cb(nla, npt, s->arg, ptr);
155 off = (char *)nla - (char *)npt->hdr;
163 NL_LOG(LOG_DEBUG3, "ignoring attr %u", nla->nla_type);
167 nla = (struct nlattr *)((char *)nla_head + (orig_len - len));
168 NL_LOG(LOG_DEBUG3, " >>> end %p attr_type %u len %u", nla,
169 nla->nla_type, nla->nla_len);
171 NL_LOG(LOG_DEBUG3, "end parse: %p remaining_len %u", nla, len);
180 struct nlattr *nla = NULL;
185 NLA_FOREACH(nla, nla_head, len) {
186 if (nla->nla_len < sizeof(struct nlattr))
188 nla_type = nla->nla_type & NLA_TYPE_MASK;
207 nlattr_get_flag(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
210 if (__predict_false(NLA_DATA_LEN(nla) != 0)) {
211 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not a flag",
212 nla->nla_type, NLA_DATA_LEN(nla));
274 nlattr_get_ip(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
279 struct sockaddr *sa = parse_rta_ip((struct rtattr *)nla, npt, &error);
319 nlattr_get_ipvia(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
324 struct sockaddr *sa = parse_rta_via((struct rtattr *)nla, npt, &error);
331 nlattr_get_bool(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
334 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(bool))) {
335 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not bool",
336 nla->nla_type, NLA_DATA_LEN(nla));
339 *((bool *)target) = *((const bool *)NL_RTA_DATA_CONST(nla));
344 nlattr_get_uint8(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
347 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(uint8_t))) {
348 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not uint8",
349 nla->nla_type, NLA_DATA_LEN(nla));
352 *((uint8_t *)target) = *((const uint8_t *)NL_RTA_DATA_CONST(nla));
357 nlattr_get_uint16(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
360 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(uint16_t))) {
361 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not uint16",
362 nla->nla_type, NLA_DATA_LEN(nla));
365 *((uint16_t *)target) = *((const uint16_t *)NL_RTA_DATA_CONST(nla));
370 nlattr_get_uint32(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
373 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(uint32_t))) {
374 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not uint32",
375 nla->nla_type, NLA_DATA_LEN(nla));
378 *((uint32_t *)target) = *((const uint32_t *)NL_RTA_DATA_CONST(nla));
383 nlattr_get_uint64(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
386 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(uint64_t))) {
387 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not uint64",
388 nla->nla_type, NLA_DATA_LEN(nla));
391 memcpy(target, NL_RTA_DATA_CONST(nla), sizeof(uint64_t));
396 nlattr_get_in_addr(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
399 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(in_addr_t))) {
401 "nla type %d size(%u) is not in_addr_t",
402 nla->nla_type, NLA_DATA_LEN(nla));
405 memcpy(target, NLA_DATA_CONST(nla), sizeof(in_addr_t));
410 nlattr_get_in6_addr(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
413 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(struct in6_addr))) {
415 "nla type %d size(%u) is not struct in6_addr",
416 nla->nla_type, NLA_DATA_LEN(nla));
419 memcpy(target, NLA_DATA_CONST(nla), sizeof(struct in6_addr));
424 nlattr_get_ifp_internal(struct nlattr *nla, struct nl_pstate *npt,
430 if (__predict_false(NLA_DATA_LEN(nla) != sizeof(uint32_t))) {
431 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not uint32",
432 nla->nla_type, NLA_DATA_LEN(nla));
435 ifindex = *((const u_int *)NLA_DATA_CONST(nla));
446 NLMSG_REPORT_ERR_MSG(npt, "nla type %d: ifindex %u invalid",
447 nla->nla_type, ifindex);
451 NL_LOG(LOG_DEBUG3, "nla type %d: ifindex %u -> %s", nla->nla_type,
458 nlattr_get_ifp(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
461 return (nlattr_get_ifp_internal(nla, npt, target, false));
465 nlattr_get_ifpz(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
468 return (nlattr_get_ifp_internal(nla, npt, target, true));
472 nlattr_get_chara(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
475 int maxlen = NLA_DATA_LEN(nla);
477 int len = strnlen((char *)NLA_DATA(nla), maxlen);
481 NLMSG_REPORT_ERR_MSG(npt, "nla type %d size(%u) is not "
483 nla->nla_type, maxlen, target_size);
487 strncpy((char *)target, (char *)NLA_DATA(nla), target_size);
492 nlattr_get_string(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
495 int maxlen = NLA_DATA_LEN(nla);
497 if (__predict_false(strnlen((char *)NLA_DATA(nla), maxlen) >= maxlen)) {
499 "nla type %d size(%u) is not NULL-terminated",
500 nla->nla_type, maxlen);
504 *((char **)target) = (char *)NLA_DATA(nla);
509 nlattr_get_stringn(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
512 int maxlen = NLA_DATA_LEN(nla);
518 memcpy(buf, NLA_DATA(nla), maxlen);
525 nlattr_get_bytes(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
530 if (NLA_DATA_LEN(nla) != size)
533 memcpy(target, NLA_DATA(nla), size);
539 nlattr_get_nla(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
542 NL_LOG(LOG_DEBUG3, "STORING %p len %d", nla, nla->nla_len);
543 *((struct nlattr **)target) = nla;
548 nlattr_get_nested(struct nlattr *nla, struct nl_pstate *npt, const void *arg,
554 return (nl_parse_header(NLA_DATA(nla), NLA_DATA_LEN(nla), p, npt,
559 nlattr_get_nested_ptr(struct nlattr *nla, struct nl_pstate *npt,
565 return (nl_parse_header(NLA_DATA(nla), NLA_DATA_LEN(nla), p, npt,