Lines Matching refs:srh
50 struct ipv6_sr_hdr *srh; member
69 struct ipv6_sr_hdr *srh; in get_srh() local
75 if (!pskb_may_pull(skb, srhoff + sizeof(*srh))) in get_srh()
78 srh = (struct ipv6_sr_hdr *)(skb->data + srhoff); in get_srh()
80 len = (srh->hdrlen + 1) << 3; in get_srh()
88 srh = (struct ipv6_sr_hdr *)(skb->data + srhoff); in get_srh()
90 if (!seg6_validate_srh(srh, len, true)) in get_srh()
93 return srh; in get_srh()
98 struct ipv6_sr_hdr *srh; in get_and_validate_srh() local
100 srh = get_srh(skb); in get_and_validate_srh()
101 if (!srh) in get_and_validate_srh()
104 if (srh->segments_left == 0) in get_and_validate_srh()
112 return srh; in get_and_validate_srh()
117 struct ipv6_sr_hdr *srh; in decap_and_validate() local
120 srh = get_srh(skb); in decap_and_validate()
121 if (srh && srh->segments_left > 0) in decap_and_validate()
125 if (srh && !seg6_hmac_validate_skb(skb)) in decap_and_validate()
145 static void advance_nextseg(struct ipv6_sr_hdr *srh, struct in6_addr *daddr) in advance_nextseg() argument
149 srh->segments_left--; in advance_nextseg()
150 addr = srh->segments + srh->segments_left; in advance_nextseg()
221 struct ipv6_sr_hdr *srh; in input_action_end() local
223 srh = get_and_validate_srh(skb); in input_action_end()
224 if (!srh) in input_action_end()
227 advance_nextseg(srh, &ipv6_hdr(skb)->daddr); in input_action_end()
241 struct ipv6_sr_hdr *srh; in input_action_end_x() local
243 srh = get_and_validate_srh(skb); in input_action_end_x()
244 if (!srh) in input_action_end_x()
247 advance_nextseg(srh, &ipv6_hdr(skb)->daddr); in input_action_end_x()
260 struct ipv6_sr_hdr *srh; in input_action_end_t() local
262 srh = get_and_validate_srh(skb); in input_action_end_t()
263 if (!srh) in input_action_end_t()
266 advance_nextseg(srh, &ipv6_hdr(skb)->daddr); in input_action_end_t()
427 struct ipv6_sr_hdr *srh; in input_action_end_b6() local
430 srh = get_and_validate_srh(skb); in input_action_end_b6()
431 if (!srh) in input_action_end_b6()
434 err = seg6_do_srh_inline(skb, slwt->srh); in input_action_end_b6()
453 struct ipv6_sr_hdr *srh; in input_action_end_b6_encap() local
456 srh = get_and_validate_srh(skb); in input_action_end_b6_encap()
457 if (!srh) in input_action_end_b6_encap()
460 advance_nextseg(srh, &ipv6_hdr(skb)->daddr); in input_action_end_b6_encap()
465 err = seg6_do_srh_encap(skb, slwt->srh, IPPROTO_IPV6); in input_action_end_b6_encap()
486 struct ipv6_sr_hdr *srh = srh_state->srh; in seg6_bpf_has_valid_srh() local
488 if (unlikely(srh == NULL)) in seg6_bpf_has_valid_srh()
495 srh->hdrlen = (u8)(srh_state->hdrlen >> 3); in seg6_bpf_has_valid_srh()
496 if (!seg6_validate_srh(srh, (srh->hdrlen + 1) << 3, true)) in seg6_bpf_has_valid_srh()
510 struct ipv6_sr_hdr *srh; in input_action_end_bpf() local
513 srh = get_and_validate_srh(skb); in input_action_end_bpf()
514 if (!srh) { in input_action_end_bpf()
518 advance_nextseg(srh, &ipv6_hdr(skb)->daddr); in input_action_end_bpf()
524 srh_state->srh = srh; in input_action_end_bpf()
525 srh_state->hdrlen = srh->hdrlen << 3; in input_action_end_bpf()
544 if (srh_state->srh && !seg6_bpf_has_valid_srh(skb)) in input_action_end_bpf()
661 struct ipv6_sr_hdr *srh; in parse_nla_srh() local
664 srh = nla_data(attrs[SEG6_LOCAL_SRH]); in parse_nla_srh()
668 if (len < sizeof(*srh) + sizeof(struct in6_addr)) in parse_nla_srh()
671 if (!seg6_validate_srh(srh, len, false)) in parse_nla_srh()
674 slwt->srh = kmemdup(srh, len, GFP_KERNEL); in parse_nla_srh()
675 if (!slwt->srh) in parse_nla_srh()
685 struct ipv6_sr_hdr *srh; in put_nla_srh() local
689 srh = slwt->srh; in put_nla_srh()
690 len = (srh->hdrlen + 1) << 3; in put_nla_srh()
696 memcpy(nla_data(nla), srh, len); in put_nla_srh()
703 int len = (a->srh->hdrlen + 1) << 3; in cmp_nla_srh()
705 if (len != ((b->srh->hdrlen + 1) << 3)) in cmp_nla_srh()
708 return memcmp(a->srh, b->srh, len); in cmp_nla_srh()
1013 kfree(slwt->srh); in seg6_local_build_state()
1022 kfree(slwt->srh); in seg6_local_destroy_state()
1065 nlsize += nla_total_size((slwt->srh->hdrlen + 1) << 3); in seg6_local_get_encap_size()