Home | History | Annotate | Download | only in lib

Lines Matching defs:rta

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