Lines Matching refs:srh

56 	struct ip6_srh_t *srh;  in get_srh()  local
77 srh = cursor_advance(cursor, sizeof(*srh)); in get_srh()
78 if ((void *)srh + sizeof(*srh) > data_end) in get_srh()
81 if (srh->type != 4) in get_srh()
84 return srh; in get_srh()
118 int is_valid_tlv_boundary(struct __sk_buff *skb, struct ip6_srh_t *srh, in is_valid_tlv_boundary() argument
126 srh_off = (char *)srh - (char *)(long)skb->data; in is_valid_tlv_boundary()
128 cur_off = srh_off + sizeof(*srh) + in is_valid_tlv_boundary()
129 sizeof(struct ip6_addr_t) * (srh->first_segment + 1); in is_valid_tlv_boundary()
141 if (cur_off >= srh_off + ((srh->hdrlen + 1) << 3)) in is_valid_tlv_boundary()
177 int add_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh, uint32_t tlv_off, in add_tlv() argument
180 uint32_t srh_off = (char *)srh - (char *)(long)skb->data; in add_tlv()
193 err = is_valid_tlv_boundary(skb, srh, &tlv_off, &pad_size, &pad_off); in add_tlv()
221 int delete_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh, in delete_tlv() argument
224 uint32_t srh_off = (char *)srh - (char *)(long)skb->data; in delete_tlv()
234 err = is_valid_tlv_boundary(skb, srh, &tlv_off, &pad_size, &pad_off); in delete_tlv()
259 int has_egr_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh) in has_egr_tlv() argument
262 ((srh->first_segment + 1) << 4); in has_egr_tlv()
290 struct ip6_srh_t *srh; in __encap_srh() local
294 srh = (struct ip6_srh_t *)srh_buf; in __encap_srh()
295 srh->nexthdr = 0; in __encap_srh()
296 srh->hdrlen = 8; in __encap_srh()
297 srh->type = 4; in __encap_srh()
298 srh->segments_left = 3; in __encap_srh()
299 srh->first_segment = 3; in __encap_srh()
300 srh->flags = 0; in __encap_srh()
301 srh->tag = 0; in __encap_srh()
303 seg = (struct ip6_addr_t *)((char *)srh + sizeof(*srh)); in __encap_srh()
312 err = bpf_lwt_push_encap(skb, 0, (void *)srh, sizeof(srh_buf)); in __encap_srh()
326 struct ip6_srh_t *srh = get_srh(skb); in __add_egr_x() local
331 if (srh == NULL) in __add_egr_x()
337 err = add_tlv(skb, srh, (srh->hdrlen+1) << 3, in __add_egr_x()
362 struct ip6_srh_t *srh = get_srh(skb); in __pop_egr() local
367 if (srh == NULL) in __pop_egr()
370 if (srh->flags != SR6_FLAG_ALERT) in __pop_egr()
373 if (srh->hdrlen != 11) // 4 segments + Egress TLV + Padding TLV in __pop_egr()
376 if (!has_egr_tlv(skb, srh)) in __pop_egr()
379 err = delete_tlv(skb, srh, 8 + (srh->first_segment + 1) * 16); in __pop_egr()
401 struct ip6_srh_t *srh = get_srh(skb); in __inspect_t() local
405 if (srh == NULL) in __inspect_t()
408 if (srh->flags != 0) in __inspect_t()
411 if (srh->tag != bpf_htons(2442)) in __inspect_t()
414 if (srh->hdrlen != 8) // 4 segments in __inspect_t()