Lines Matching refs:rta
654 struct rtattr *rta; in addattr_l() local
660 rta = NLMSG_TAIL(n); in addattr_l()
661 rta->rta_type = type; in addattr_l()
662 rta->rta_len = len; in addattr_l()
663 memcpy(RTA_DATA(rta), data, alen); in addattr_l()
714 int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data) in rta_addattr32() argument
719 if (RTA_ALIGN(rta->rta_len) + len > maxlen) { in rta_addattr32()
723 subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len)); in rta_addattr32()
727 rta->rta_len = NLMSG_ALIGN(rta->rta_len) + len; in rta_addattr32()
731 int rta_addattr_l(struct rtattr *rta, int maxlen, int type, in rta_addattr_l() argument
737 if (RTA_ALIGN(rta->rta_len) + RTA_ALIGN(len) > maxlen) { in rta_addattr_l()
741 subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len)); in rta_addattr_l()
745 rta->rta_len = NLMSG_ALIGN(rta->rta_len) + RTA_ALIGN(len); in rta_addattr_l()
749 int rta_addattr8(struct rtattr *rta, int maxlen, int type, __u8 data) in rta_addattr8() argument
751 return rta_addattr_l(rta, maxlen, type, &data, sizeof(__u8)); in rta_addattr8()
754 int rta_addattr16(struct rtattr *rta, int maxlen, int type, __u16 data) in rta_addattr16() argument
756 return rta_addattr_l(rta, maxlen, type, &data, sizeof(__u16)); in rta_addattr16()
759 int rta_addattr64(struct rtattr *rta, int maxlen, int type, __u64 data) in rta_addattr64() argument
761 return rta_addattr_l(rta, maxlen, type, &data, sizeof(__u64)); in rta_addattr64()
764 struct rtattr *rta_nest(struct rtattr *rta, int maxlen, int type) in rta_nest() argument
766 struct rtattr *nest = RTA_TAIL(rta); in rta_nest()
768 rta_addattr_l(rta, maxlen, type, NULL, 0); in rta_nest()
773 int rta_nest_end(struct rtattr *rta, struct rtattr *nest) in rta_nest_end() argument
775 nest->rta_len = (void *)RTA_TAIL(rta) - (void *)nest; in rta_nest_end()
777 return rta->rta_len; in rta_nest_end()
780 int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len) in parse_rtattr() argument
782 return parse_rtattr_flags(tb, max, rta, len, 0); in parse_rtattr()
785 int parse_rtattr_flags(struct rtattr *tb[], int max, struct rtattr *rta, in parse_rtattr_flags() argument
791 while (RTA_OK(rta, len)) { in parse_rtattr_flags()
792 type = rta->rta_type & ~flags; in parse_rtattr_flags()
794 tb[type] = rta; in parse_rtattr_flags()
795 rta = RTA_NEXT(rta,len); in parse_rtattr_flags()
798 fprintf(stderr, "!!!Deficit %d, rta_len=%d\n", len, rta->rta_len); in parse_rtattr_flags()
802 int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len) in parse_rtattr_byindex() argument
807 while (RTA_OK(rta, len)) { in parse_rtattr_byindex()
808 if (rta->rta_type <= max && i < max) in parse_rtattr_byindex()
809 tb[i++] = rta; in parse_rtattr_byindex()
810 rta = RTA_NEXT(rta,len); in parse_rtattr_byindex()
813 fprintf(stderr, "!!!Deficit %d, rta_len=%d\n", len, rta->rta_len); in parse_rtattr_byindex()
817 struct rtattr *parse_rtattr_one(int type, struct rtattr *rta, int len) in parse_rtattr_one() argument
819 while (RTA_OK(rta, len)) { in parse_rtattr_one()
820 if (rta->rta_type == type) in parse_rtattr_one()
821 return rta; in parse_rtattr_one()
822 rta = RTA_NEXT(rta, len); in parse_rtattr_one()
825 fprintf(stderr, "!!!Deficit %d, rta_len=%d\n", len, rta->rta_len); in parse_rtattr_one()
829 int __parse_rtattr_nested_compat(struct rtattr *tb[], int max, struct rtattr *rta, in __parse_rtattr_nested_compat() argument
832 if (RTA_PAYLOAD(rta) < len) in __parse_rtattr_nested_compat()
834 if (RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr)) { in __parse_rtattr_nested_compat()
835 rta = RTA_DATA(rta) + RTA_ALIGN(len); in __parse_rtattr_nested_compat()
836 return parse_rtattr_nested(tb, max, rta); in __parse_rtattr_nested_compat()