Lines Matching defs:srh

58 	struct ip6_srh_t *srh;
79 srh = cursor_advance(cursor, sizeof(*srh));
80 if ((void *)srh + sizeof(*srh) > data_end)
83 if (srh->type != 4)
86 return srh;
120 int is_valid_tlv_boundary(struct __sk_buff *skb, struct ip6_srh_t *srh,
128 srh_off = (char *)srh - (char *)(long)skb->data;
130 cur_off = srh_off + sizeof(*srh) +
131 sizeof(struct ip6_addr_t) * (srh->first_segment + 1);
143 if (cur_off >= srh_off + ((srh->hdrlen + 1) << 3))
179 int add_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh, uint32_t tlv_off,
182 uint32_t srh_off = (char *)srh - (char *)(long)skb->data;
195 err = is_valid_tlv_boundary(skb, srh, &tlv_off, &pad_size, &pad_off);
223 int delete_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh,
226 uint32_t srh_off = (char *)srh - (char *)(long)skb->data;
236 err = is_valid_tlv_boundary(skb, srh, &tlv_off, &pad_size, &pad_off);
261 int has_egr_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh)
264 ((srh->first_segment + 1) << 4);
292 struct ip6_srh_t *srh;
296 srh = (struct ip6_srh_t *)srh_buf;
297 srh->nexthdr = 0;
298 srh->hdrlen = 8;
299 srh->type = 4;
300 srh->segments_left = 3;
301 srh->first_segment = 3;
302 srh->flags = 0;
303 srh->tag = 0;
305 seg = (struct ip6_addr_t *)((char *)srh + sizeof(*srh));
314 err = bpf_lwt_push_encap(skb, 0, (void *)srh, sizeof(srh_buf));
328 struct ip6_srh_t *srh = get_srh(skb);
333 if (srh == NULL)
339 err = add_tlv(skb, srh, (srh->hdrlen+1) << 3,
364 struct ip6_srh_t *srh = get_srh(skb);
369 if (srh == NULL)
372 if (srh->flags != SR6_FLAG_ALERT)
375 if (srh->hdrlen != 11) // 4 segments + Egress TLV + Padding TLV
378 if (!has_egr_tlv(skb, srh))
381 err = delete_tlv(skb, srh, 8 + (srh->first_segment + 1) * 16);
403 struct ip6_srh_t *srh = get_srh(skb);
407 if (srh == NULL)
410 if (srh->flags != 0)
413 if (srh->tag != bpf_htons(2442))
416 if (srh->hdrlen != 8) // 4 segments