Lines Matching refs:srh
16 DECLARE_FLEX_ARRAY(struct ipv6_rpl_sr_hdr, srh);
39 static bool rpl_validate_srh(struct net *net, struct ipv6_rpl_sr_hdr *srh,
44 if ((srh->hdrlen << 3) != seglen)
48 if (!srh->segments_left ||
49 (srh->segments_left * sizeof(struct in6_addr)) != seglen)
52 if (srh->cmpri || srh->cmpre)
55 err = ipv6_chk_rpl_srh_loop(net, srh->rpl_segaddr,
56 srh->segments_left);
60 if (ipv6_addr_type(&srh->rpl_segaddr[srh->segments_left - 1]) &
74 struct ipv6_rpl_sr_hdr *srh;
89 srh = nla_data(tb[RPL_IPTUNNEL_SRH]);
92 if (srh_len < sizeof(*srh))
96 if (!rpl_validate_srh(net, srh, srh_len - sizeof(*srh)))
111 memcpy(&rlwt->tuninfo.srh, srh, srh_len);
128 const struct ipv6_rpl_sr_hdr *srh)
139 buf = kcalloc(struct_size(srh, segments.addr, srh->segments_left), 2, GFP_ATOMIC);
144 csrh = (struct ipv6_rpl_sr_hdr *)(buf + ((srh->hdrlen + 1) << 3));
146 memcpy(isrh, srh, sizeof(*isrh));
147 memcpy(isrh->rpl_segaddr, &srh->rpl_segaddr[1],
148 (srh->segments_left - 1) * 16);
149 isrh->rpl_segaddr[srh->segments_left - 1] = oldhdr->daddr;
151 ipv6_rpl_srh_compress(csrh, isrh, &srh->rpl_segaddr[0],
177 hdr->daddr = srh->rpl_segaddr[0];
199 return rpl_do_srh_inline(skb, rlwt, tinfo->srh);
303 len = RPL_IPTUNNEL_SRH_SIZE(tuninfo->srh);
310 memcpy(data, tuninfo->srh, len);
330 return nla_total_size(RPL_IPTUNNEL_SRH_SIZE(tuninfo->srh));
337 int len = RPL_IPTUNNEL_SRH_SIZE(a_hdr->srh);
339 if (len != RPL_IPTUNNEL_SRH_SIZE(b_hdr->srh))