Lines Matching refs:srh
28 bool seg6_validate_srh(struct ipv6_sr_hdr *srh, int len, bool reduced) in seg6_validate_srh() argument
34 if (srh->type != IPV6_SRCRT_TYPE_4) in seg6_validate_srh()
37 if (((srh->hdrlen + 1) << 3) != len) in seg6_validate_srh()
40 if (!reduced && srh->segments_left > srh->first_segment) { in seg6_validate_srh()
43 max_last_entry = (srh->hdrlen / 2) - 1; in seg6_validate_srh()
45 if (srh->first_segment > max_last_entry) in seg6_validate_srh()
48 if (srh->segments_left > srh->first_segment + 1) in seg6_validate_srh()
52 tlv_offset = sizeof(*srh) + ((srh->first_segment + 1) << 4); in seg6_validate_srh()
65 tlv = (struct sr6_tlv *)((unsigned char *)srh + tlv_offset); in seg6_validate_srh()
80 struct ipv6_sr_hdr *srh; in seg6_get_srh() local
86 if (!pskb_may_pull(skb, srhoff + sizeof(*srh))) in seg6_get_srh()
89 srh = (struct ipv6_sr_hdr *)(skb->data + srhoff); in seg6_get_srh()
91 len = (srh->hdrlen + 1) << 3; in seg6_get_srh()
99 srh = (struct ipv6_sr_hdr *)(skb->data + srhoff); in seg6_get_srh()
101 if (!seg6_validate_srh(srh, len, true)) in seg6_get_srh()
104 return srh; in seg6_get_srh()
114 struct ipv6_sr_hdr *srh; in seg6_icmp_srh() local
122 srh = seg6_get_srh(skb, 0); in seg6_icmp_srh()
123 if (!srh) in seg6_icmp_srh()
126 if (srh->type != IPV6_SRCRT_TYPE_4) in seg6_icmp_srh()
130 opt->srhoff = (unsigned char *)srh - skb->data; in seg6_icmp_srh()