Lines Matching refs:attr
109 int ynl_attr_validate(struct ynl_parse_arg *yarg, const struct nlattr *attr);
191 static inline unsigned int ynl_attr_type(const struct nlattr *attr)
193 return attr->nla_type & NLA_TYPE_MASK;
196 static inline unsigned int ynl_attr_data_len(const struct nlattr *attr)
198 return attr->nla_len - NLA_HDRLEN;
201 static inline void *ynl_attr_data(const struct nlattr *attr)
203 return (unsigned char *)attr + NLA_HDRLEN;
206 static inline void *ynl_attr_data_end(const struct nlattr *attr)
208 return (char *)ynl_attr_data(attr) + ynl_attr_data_len(attr);
211 #define ynl_attr_for_each(attr, nlh, fixed_hdr_sz) \
212 for ((attr) = ynl_attr_first(nlh, (nlh)->nlmsg_len, \
213 NLMSG_HDRLEN + fixed_hdr_sz); attr; \
214 (attr) = ynl_attr_next(ynl_nlmsg_end_addr(nlh), attr))
216 #define ynl_attr_for_each_nested_off(attr, outer, offset) \
217 for ((attr) = ynl_attr_first(outer, outer->nla_len, \
219 attr; \
220 (attr) = ynl_attr_next(ynl_attr_data_end(outer), attr))
222 #define ynl_attr_for_each_nested(attr, outer) \
223 ynl_attr_for_each_nested_off(attr, outer, 0)
225 #define ynl_attr_for_each_payload(start, len, attr) \
226 for ((attr) = ynl_attr_first(start, len, 0); attr; \
227 (attr) = ynl_attr_next(start + len, attr))
230 ynl_attr_if_good(const void *end, struct nlattr *attr)
232 if (attr + 1 > (const struct nlattr *)end)
234 if (ynl_attr_data_end(attr) > end)
236 return attr;
242 struct nlattr *attr;
244 attr = (struct nlattr *)((char *)prev + NLA_ALIGN(prev->nla_len));
245 return ynl_attr_if_good(end, attr);
251 struct nlattr *attr;
253 attr = (struct nlattr *)((char *)start + NLMSG_ALIGN(skip));
254 return ynl_attr_if_good((char *)start + len, attr);
275 struct nlattr *attr;
280 attr = (struct nlattr *)ynl_nlmsg_end_addr(nlh);
281 attr->nla_type = attr_type | NLA_F_NESTED;
284 return attr;
288 ynl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *attr)
290 attr->nla_len = (char *)ynl_nlmsg_end_addr(nlh) - (char *)attr;
297 struct nlattr *attr;
302 attr = (struct nlattr *)ynl_nlmsg_end_addr(nlh);
303 attr->nla_type = attr_type;
304 attr->nla_len = NLA_HDRLEN + size;
306 memcpy(ynl_attr_data(attr), value, size);
308 nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len);
314 struct nlattr *attr;
321 attr = (struct nlattr *)ynl_nlmsg_end_addr(nlh);
322 attr->nla_type = attr_type;
324 strcpy((char *)ynl_attr_data(attr), str);
325 attr->nla_len = NLA_HDRLEN + NLA_ALIGN(len);
327 nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len);
330 static inline const char *ynl_attr_get_str(const struct nlattr *attr)
332 return (const char *)ynl_attr_data(attr);
335 static inline __s8 ynl_attr_get_s8(const struct nlattr *attr)
337 return *(__s8 *)ynl_attr_data(attr);
340 static inline __s16 ynl_attr_get_s16(const struct nlattr *attr)
342 return *(__s16 *)ynl_attr_data(attr);
345 static inline __s32 ynl_attr_get_s32(const struct nlattr *attr)
347 return *(__s32 *)ynl_attr_data(attr);
350 static inline __s64 ynl_attr_get_s64(const struct nlattr *attr)
354 memcpy(&tmp, (unsigned char *)(attr + 1), sizeof(tmp));
358 static inline __u8 ynl_attr_get_u8(const struct nlattr *attr)
360 return *(__u8 *)ynl_attr_data(attr);
363 static inline __u16 ynl_attr_get_u16(const struct nlattr *attr)
365 return *(__u16 *)ynl_attr_data(attr);
368 static inline __u32 ynl_attr_get_u32(const struct nlattr *attr)
370 return *(__u32 *)ynl_attr_data(attr);
373 static inline __u64 ynl_attr_get_u64(const struct nlattr *attr)
377 memcpy(&tmp, (unsigned char *)(attr + 1), sizeof(tmp));
429 static inline __u64 ynl_attr_get_uint(const struct nlattr *attr)
431 switch (ynl_attr_data_len(attr)) {
433 return ynl_attr_get_u32(attr);
435 return ynl_attr_get_u64(attr);
441 static inline __s64 ynl_attr_get_sint(const struct nlattr *attr)
443 switch (ynl_attr_data_len(attr)) {
445 return ynl_attr_get_s32(attr);
447 return ynl_attr_get_s64(attr);