Lines Matching refs:skb
64 static bool ip6_tlvopt_unknown(struct sk_buff *skb, int optoff, in ip6_tlvopt_unknown() argument
78 switch ((skb_network_header(skb)[optoff] & 0xC0) >> 6) { in ip6_tlvopt_unknown()
89 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) in ip6_tlvopt_unknown()
93 icmpv6_param_prob(skb, ICMPV6_UNK_OPTION, optoff); in ip6_tlvopt_unknown()
98 kfree_skb(skb); in ip6_tlvopt_unknown()
102 static bool ipv6_hop_ra(struct sk_buff *skb, int optoff);
103 static bool ipv6_hop_ioam(struct sk_buff *skb, int optoff);
104 static bool ipv6_hop_jumbo(struct sk_buff *skb, int optoff);
105 static bool ipv6_hop_calipso(struct sk_buff *skb, int optoff);
107 static bool ipv6_dest_hao(struct sk_buff *skb, int optoff);
113 struct sk_buff *skb, in ip6_parse_tlv() argument
116 int len = (skb_transport_header(skb)[1] + 1) << 3; in ip6_parse_tlv()
117 const unsigned char *nh = skb_network_header(skb); in ip6_parse_tlv()
118 int off = skb_network_header_len(skb); in ip6_parse_tlv()
128 if (skb_transport_offset(skb) + len > skb_headlen(skb)) in ip6_parse_tlv()
176 if (!ipv6_hop_ra(skb, off)) in ip6_parse_tlv()
180 if (!ipv6_hop_ioam(skb, off)) in ip6_parse_tlv()
184 if (!ipv6_hop_jumbo(skb, off)) in ip6_parse_tlv()
188 if (!ipv6_hop_calipso(skb, off)) in ip6_parse_tlv()
192 if (!ip6_tlvopt_unknown(skb, off, in ip6_parse_tlv()
201 if (!ipv6_dest_hao(skb, off)) in ip6_parse_tlv()
206 if (!ip6_tlvopt_unknown(skb, off, in ip6_parse_tlv()
221 kfree_skb(skb); in ip6_parse_tlv()
230 static bool ipv6_dest_hao(struct sk_buff *skb, int optoff) in ipv6_dest_hao() argument
233 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_dest_hao()
234 struct ipv6hdr *ipv6h = ipv6_hdr(skb); in ipv6_dest_hao()
244 hao = (struct ipv6_destopt_hao *)(skb_network_header(skb) + optoff); in ipv6_dest_hao()
258 ret = xfrm6_input_addr(skb, (xfrm_address_t *)&ipv6h->daddr, in ipv6_dest_hao()
263 if (skb_cloned(skb)) { in ipv6_dest_hao()
264 if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) in ipv6_dest_hao()
268 hao = (struct ipv6_destopt_hao *)(skb_network_header(skb) + in ipv6_dest_hao()
270 ipv6h = ipv6_hdr(skb); in ipv6_dest_hao()
273 if (skb->ip_summed == CHECKSUM_COMPLETE) in ipv6_dest_hao()
274 skb->ip_summed = CHECKSUM_NONE; in ipv6_dest_hao()
278 if (skb->tstamp == 0) in ipv6_dest_hao()
279 __net_timestamp(skb); in ipv6_dest_hao()
284 kfree_skb(skb); in ipv6_dest_hao()
289 static int ipv6_destopt_rcv(struct sk_buff *skb) in ipv6_destopt_rcv() argument
291 struct inet6_dev *idev = __in6_dev_get(skb->dev); in ipv6_destopt_rcv()
292 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_destopt_rcv()
296 struct dst_entry *dst = skb_dst(skb); in ipv6_destopt_rcv()
297 struct net *net = dev_net(skb->dev); in ipv6_destopt_rcv()
300 if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || in ipv6_destopt_rcv()
301 !pskb_may_pull(skb, (skb_transport_offset(skb) + in ipv6_destopt_rcv()
302 ((skb_transport_header(skb)[1] + 1) << 3)))) { in ipv6_destopt_rcv()
306 kfree_skb(skb); in ipv6_destopt_rcv()
310 extlen = (skb_transport_header(skb)[1] + 1) << 3; in ipv6_destopt_rcv()
314 opt->lastopt = opt->dst1 = skb_network_header_len(skb); in ipv6_destopt_rcv()
319 if (ip6_parse_tlv(false, skb, net->ipv6.sysctl.max_dst_opts_cnt)) { in ipv6_destopt_rcv()
320 skb->transport_header += extlen; in ipv6_destopt_rcv()
321 opt = IP6CB(skb); in ipv6_destopt_rcv()
334 static void seg6_update_csum(struct sk_buff *skb) in seg6_update_csum() argument
344 hdr = (struct ipv6_sr_hdr *)skb_transport_header(skb); in seg6_update_csum()
355 update_csum_diff4(skb, from, to); in seg6_update_csum()
359 update_csum_diff16(skb, (__be32 *)(&ipv6_hdr(skb)->daddr), in seg6_update_csum()
363 static int ipv6_srh_rcv(struct sk_buff *skb) in ipv6_srh_rcv() argument
365 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_srh_rcv()
366 struct net *net = dev_net(skb->dev); in ipv6_srh_rcv()
372 hdr = (struct ipv6_sr_hdr *)skb_transport_header(skb); in ipv6_srh_rcv()
374 idev = __in6_dev_get(skb->dev); in ipv6_srh_rcv()
381 kfree_skb(skb); in ipv6_srh_rcv()
386 if (!seg6_hmac_validate_skb(skb)) { in ipv6_srh_rcv()
387 kfree_skb(skb); in ipv6_srh_rcv()
397 skb_postpull_rcsum(skb, skb_network_header(skb), in ipv6_srh_rcv()
398 skb_network_header_len(skb)); in ipv6_srh_rcv()
400 if (!pskb_pull(skb, offset)) { in ipv6_srh_rcv()
401 kfree_skb(skb); in ipv6_srh_rcv()
404 skb_postpull_rcsum(skb, skb_transport_header(skb), in ipv6_srh_rcv()
407 skb_reset_network_header(skb); in ipv6_srh_rcv()
408 skb_reset_transport_header(skb); in ipv6_srh_rcv()
409 skb->encapsulation = 0; in ipv6_srh_rcv()
411 skb->protocol = htons(ETH_P_IP); in ipv6_srh_rcv()
412 __skb_tunnel_rx(skb, skb->dev, net); in ipv6_srh_rcv()
414 netif_rx(skb); in ipv6_srh_rcv()
418 opt->srcrt = skb_network_header_len(skb); in ipv6_srh_rcv()
420 skb->transport_header += (hdr->hdrlen + 1) << 3; in ipv6_srh_rcv()
421 opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb); in ipv6_srh_rcv()
428 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_srh_rcv()
430 skb_network_header(skb))); in ipv6_srh_rcv()
434 if (skb_cloned(skb)) { in ipv6_srh_rcv()
435 if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { in ipv6_srh_rcv()
436 __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), in ipv6_srh_rcv()
438 kfree_skb(skb); in ipv6_srh_rcv()
443 hdr = (struct ipv6_sr_hdr *)skb_transport_header(skb); in ipv6_srh_rcv()
448 skb_push(skb, sizeof(struct ipv6hdr)); in ipv6_srh_rcv()
450 if (skb->ip_summed == CHECKSUM_COMPLETE) in ipv6_srh_rcv()
451 seg6_update_csum(skb); in ipv6_srh_rcv()
453 ipv6_hdr(skb)->daddr = *addr; in ipv6_srh_rcv()
455 skb_dst_drop(skb); in ipv6_srh_rcv()
457 ip6_route_input(skb); in ipv6_srh_rcv()
459 if (skb_dst(skb)->error) { in ipv6_srh_rcv()
460 dst_input(skb); in ipv6_srh_rcv()
464 if (skb_dst(skb)->dev->flags & IFF_LOOPBACK) { in ipv6_srh_rcv()
465 if (ipv6_hdr(skb)->hop_limit <= 1) { in ipv6_srh_rcv()
467 icmpv6_send(skb, ICMPV6_TIME_EXCEED, in ipv6_srh_rcv()
469 kfree_skb(skb); in ipv6_srh_rcv()
472 ipv6_hdr(skb)->hop_limit--; in ipv6_srh_rcv()
474 skb_pull(skb, sizeof(struct ipv6hdr)); in ipv6_srh_rcv()
478 dst_input(skb); in ipv6_srh_rcv()
483 static int ipv6_rpl_srh_rcv(struct sk_buff *skb) in ipv6_rpl_srh_rcv() argument
486 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_rpl_srh_rcv()
487 struct net *net = dev_net(skb->dev); in ipv6_rpl_srh_rcv()
497 idev = __in6_dev_get(skb->dev); in ipv6_rpl_srh_rcv()
504 kfree_skb(skb); in ipv6_rpl_srh_rcv()
509 hdr = (struct ipv6_rpl_sr_hdr *)skb_transport_header(skb); in ipv6_rpl_srh_rcv()
515 skb_postpull_rcsum(skb, skb_network_header(skb), in ipv6_rpl_srh_rcv()
516 skb_network_header_len(skb)); in ipv6_rpl_srh_rcv()
518 if (!pskb_pull(skb, offset)) { in ipv6_rpl_srh_rcv()
519 kfree_skb(skb); in ipv6_rpl_srh_rcv()
522 skb_postpull_rcsum(skb, skb_transport_header(skb), in ipv6_rpl_srh_rcv()
525 skb_reset_network_header(skb); in ipv6_rpl_srh_rcv()
526 skb_reset_transport_header(skb); in ipv6_rpl_srh_rcv()
527 skb->encapsulation = 0; in ipv6_rpl_srh_rcv()
529 __skb_tunnel_rx(skb, skb->dev, net); in ipv6_rpl_srh_rcv()
531 netif_rx(skb); in ipv6_rpl_srh_rcv()
535 opt->srcrt = skb_network_header_len(skb); in ipv6_rpl_srh_rcv()
537 skb->transport_header += (hdr->hdrlen + 1) << 3; in ipv6_rpl_srh_rcv()
538 opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb); in ipv6_rpl_srh_rcv()
543 if (!pskb_may_pull(skb, sizeof(*hdr))) { in ipv6_rpl_srh_rcv()
544 kfree_skb(skb); in ipv6_rpl_srh_rcv()
555 kfree_skb(skb); in ipv6_rpl_srh_rcv()
561 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_rpl_srh_rcv()
563 skb_network_header(skb))); in ipv6_rpl_srh_rcv()
567 if (skb_cloned(skb)) { in ipv6_rpl_srh_rcv()
568 if (pskb_expand_head(skb, IPV6_RPL_SRH_WORST_SWAP_SIZE, 0, in ipv6_rpl_srh_rcv()
570 __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), in ipv6_rpl_srh_rcv()
572 kfree_skb(skb); in ipv6_rpl_srh_rcv()
576 err = skb_cow_head(skb, IPV6_RPL_SRH_WORST_SWAP_SIZE); in ipv6_rpl_srh_rcv()
578 kfree_skb(skb); in ipv6_rpl_srh_rcv()
583 hdr = (struct ipv6_rpl_sr_hdr *)skb_transport_header(skb); in ipv6_rpl_srh_rcv()
585 if (!pskb_may_pull(skb, ipv6_rpl_srh_size(n, hdr->cmpri, in ipv6_rpl_srh_rcv()
587 kfree_skb(skb); in ipv6_rpl_srh_rcv()
596 kfree_skb(skb); in ipv6_rpl_srh_rcv()
601 ipv6_rpl_srh_decompress(ohdr, hdr, &ipv6_hdr(skb)->daddr, n); in ipv6_rpl_srh_rcv()
604 if ((ipv6_addr_type(&ipv6_hdr(skb)->daddr) & IPV6_ADDR_MULTICAST) || in ipv6_rpl_srh_rcv()
606 kfree_skb(skb); in ipv6_rpl_srh_rcv()
613 icmpv6_send(skb, ICMPV6_PARAMPROB, 0, 0); in ipv6_rpl_srh_rcv()
614 kfree_skb(skb); in ipv6_rpl_srh_rcv()
619 addr = ipv6_hdr(skb)->daddr; in ipv6_rpl_srh_rcv()
620 ipv6_hdr(skb)->daddr = ohdr->rpl_segaddr[i]; in ipv6_rpl_srh_rcv()
623 ipv6_rpl_srh_compress(chdr, ohdr, &ipv6_hdr(skb)->daddr, n); in ipv6_rpl_srh_rcv()
625 oldhdr = ipv6_hdr(skb); in ipv6_rpl_srh_rcv()
627 skb_pull(skb, ((hdr->hdrlen + 1) << 3)); in ipv6_rpl_srh_rcv()
628 skb_postpull_rcsum(skb, oldhdr, in ipv6_rpl_srh_rcv()
630 skb_push(skb, ((chdr->hdrlen + 1) << 3) + sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
631 skb_reset_network_header(skb); in ipv6_rpl_srh_rcv()
632 skb_mac_header_rebuild(skb); in ipv6_rpl_srh_rcv()
633 skb_set_transport_header(skb, sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
635 memmove(ipv6_hdr(skb), oldhdr, sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
636 memcpy(skb_transport_header(skb), chdr, (chdr->hdrlen + 1) << 3); in ipv6_rpl_srh_rcv()
638 ipv6_hdr(skb)->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
639 skb_postpush_rcsum(skb, ipv6_hdr(skb), in ipv6_rpl_srh_rcv()
644 skb_dst_drop(skb); in ipv6_rpl_srh_rcv()
646 ip6_route_input(skb); in ipv6_rpl_srh_rcv()
648 if (skb_dst(skb)->error) { in ipv6_rpl_srh_rcv()
649 dst_input(skb); in ipv6_rpl_srh_rcv()
653 if (skb_dst(skb)->dev->flags & IFF_LOOPBACK) { in ipv6_rpl_srh_rcv()
654 if (ipv6_hdr(skb)->hop_limit <= 1) { in ipv6_rpl_srh_rcv()
656 icmpv6_send(skb, ICMPV6_TIME_EXCEED, in ipv6_rpl_srh_rcv()
658 kfree_skb(skb); in ipv6_rpl_srh_rcv()
661 ipv6_hdr(skb)->hop_limit--; in ipv6_rpl_srh_rcv()
663 skb_pull(skb, sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
667 dst_input(skb); in ipv6_rpl_srh_rcv()
677 static int ipv6_rthdr_rcv(struct sk_buff *skb) in ipv6_rthdr_rcv() argument
679 struct inet6_dev *idev = __in6_dev_get(skb->dev); in ipv6_rthdr_rcv()
680 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_rthdr_rcv()
686 struct net *net = dev_net(skb->dev); in ipv6_rthdr_rcv()
689 idev = __in6_dev_get(skb->dev); in ipv6_rthdr_rcv()
693 if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || in ipv6_rthdr_rcv()
694 !pskb_may_pull(skb, (skb_transport_offset(skb) + in ipv6_rthdr_rcv()
695 ((skb_transport_header(skb)[1] + 1) << 3)))) { in ipv6_rthdr_rcv()
697 kfree_skb(skb); in ipv6_rthdr_rcv()
701 hdr = (struct ipv6_rt_hdr *)skb_transport_header(skb); in ipv6_rthdr_rcv()
703 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr) || in ipv6_rthdr_rcv()
704 skb->pkt_type != PACKET_HOST) { in ipv6_rthdr_rcv()
706 kfree_skb(skb); in ipv6_rthdr_rcv()
713 return ipv6_srh_rcv(skb); in ipv6_rthdr_rcv()
716 return ipv6_rpl_srh_rcv(skb); in ipv6_rthdr_rcv()
732 kfree_skb(skb); in ipv6_rthdr_rcv()
741 opt->lastopt = opt->srcrt = skb_network_header_len(skb); in ipv6_rthdr_rcv()
742 skb->transport_header += (hdr->hdrlen + 1) << 3; in ipv6_rthdr_rcv()
745 opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb); in ipv6_rthdr_rcv()
757 kfree_skb(skb); in ipv6_rthdr_rcv()
775 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_rthdr_rcv()
777 skb_network_header(skb))); in ipv6_rthdr_rcv()
784 if (skb_cloned(skb)) { in ipv6_rthdr_rcv()
786 if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { in ipv6_rthdr_rcv()
787 __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), in ipv6_rthdr_rcv()
789 kfree_skb(skb); in ipv6_rthdr_rcv()
792 hdr = (struct ipv6_rt_hdr *)skb_transport_header(skb); in ipv6_rthdr_rcv()
795 if (skb->ip_summed == CHECKSUM_COMPLETE) in ipv6_rthdr_rcv()
796 skb->ip_summed = CHECKSUM_NONE; in ipv6_rthdr_rcv()
807 if (xfrm6_input_addr(skb, (xfrm_address_t *)addr, in ipv6_rthdr_rcv()
808 (xfrm_address_t *)&ipv6_hdr(skb)->saddr, in ipv6_rthdr_rcv()
811 kfree_skb(skb); in ipv6_rthdr_rcv()
814 if (!ipv6_chk_home_addr(dev_net(skb_dst(skb)->dev), addr)) { in ipv6_rthdr_rcv()
816 kfree_skb(skb); in ipv6_rthdr_rcv()
827 kfree_skb(skb); in ipv6_rthdr_rcv()
832 *addr = ipv6_hdr(skb)->daddr; in ipv6_rthdr_rcv()
833 ipv6_hdr(skb)->daddr = daddr; in ipv6_rthdr_rcv()
835 skb_dst_drop(skb); in ipv6_rthdr_rcv()
836 ip6_route_input(skb); in ipv6_rthdr_rcv()
837 if (skb_dst(skb)->error) { in ipv6_rthdr_rcv()
838 skb_push(skb, skb->data - skb_network_header(skb)); in ipv6_rthdr_rcv()
839 dst_input(skb); in ipv6_rthdr_rcv()
843 if (skb_dst(skb)->dev->flags&IFF_LOOPBACK) { in ipv6_rthdr_rcv()
844 if (ipv6_hdr(skb)->hop_limit <= 1) { in ipv6_rthdr_rcv()
846 icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, in ipv6_rthdr_rcv()
848 kfree_skb(skb); in ipv6_rthdr_rcv()
851 ipv6_hdr(skb)->hop_limit--; in ipv6_rthdr_rcv()
855 skb_push(skb, skb->data - skb_network_header(skb)); in ipv6_rthdr_rcv()
856 dst_input(skb); in ipv6_rthdr_rcv()
861 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_rthdr_rcv()
862 (&hdr->type) - skb_network_header(skb)); in ipv6_rthdr_rcv()
920 static inline struct net *ipv6_skb_net(struct sk_buff *skb) in ipv6_skb_net() argument
922 return skb_dst(skb) ? dev_net(skb_dst(skb)->dev) : dev_net(skb->dev); in ipv6_skb_net()
927 static bool ipv6_hop_ra(struct sk_buff *skb, int optoff) in ipv6_hop_ra() argument
929 const unsigned char *nh = skb_network_header(skb); in ipv6_hop_ra()
932 IP6CB(skb)->flags |= IP6SKB_ROUTERALERT; in ipv6_hop_ra()
933 memcpy(&IP6CB(skb)->ra, nh + optoff + 2, sizeof(IP6CB(skb)->ra)); in ipv6_hop_ra()
938 kfree_skb(skb); in ipv6_hop_ra()
944 static bool ipv6_hop_ioam(struct sk_buff *skb, int optoff) in ipv6_hop_ioam() argument
955 if (!__in6_dev_get(skb->dev)->cnf.ioam6_enabled) in ipv6_hop_ioam()
959 hdr = (struct ioam6_hdr *)(skb_network_header(skb) + optoff); in ipv6_hop_ioam()
975 ns = ioam6_namespace(ipv6_skb_net(skb), trace->namespace_id); in ipv6_hop_ioam()
979 if (!skb_valid_dst(skb)) in ipv6_hop_ioam()
980 ip6_route_input(skb); in ipv6_hop_ioam()
982 ioam6_fill_trace_data(skb, ns, trace); in ipv6_hop_ioam()
992 kfree_skb(skb); in ipv6_hop_ioam()
998 static bool ipv6_hop_jumbo(struct sk_buff *skb, int optoff) in ipv6_hop_jumbo() argument
1000 const unsigned char *nh = skb_network_header(skb); in ipv6_hop_jumbo()
1001 struct inet6_dev *idev = __in6_dev_get_safely(skb->dev); in ipv6_hop_jumbo()
1002 struct net *net = ipv6_skb_net(skb); in ipv6_hop_jumbo()
1015 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2); in ipv6_hop_jumbo()
1018 if (ipv6_hdr(skb)->payload_len) { in ipv6_hop_jumbo()
1020 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff); in ipv6_hop_jumbo()
1024 if (pkt_len > skb->len - sizeof(struct ipv6hdr)) { in ipv6_hop_jumbo()
1029 if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr))) in ipv6_hop_jumbo()
1032 IP6CB(skb)->flags |= IP6SKB_JUMBOGRAM; in ipv6_hop_jumbo()
1036 kfree_skb(skb); in ipv6_hop_jumbo()
1042 static bool ipv6_hop_calipso(struct sk_buff *skb, int optoff) in ipv6_hop_calipso() argument
1044 const unsigned char *nh = skb_network_header(skb); in ipv6_hop_calipso()
1052 if (!calipso_validate(skb, nh + optoff)) in ipv6_hop_calipso()
1058 kfree_skb(skb); in ipv6_hop_calipso()
1062 int ipv6_parse_hopopts(struct sk_buff *skb) in ipv6_parse_hopopts() argument
1064 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_parse_hopopts()
1065 struct net *net = dev_net(skb->dev); in ipv6_parse_hopopts()
1074 if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + 8) || in ipv6_parse_hopopts()
1075 !pskb_may_pull(skb, (sizeof(struct ipv6hdr) + in ipv6_parse_hopopts()
1076 ((skb_transport_header(skb)[1] + 1) << 3)))) { in ipv6_parse_hopopts()
1078 kfree_skb(skb); in ipv6_parse_hopopts()
1082 extlen = (skb_transport_header(skb)[1] + 1) << 3; in ipv6_parse_hopopts()
1087 if (ip6_parse_tlv(true, skb, net->ipv6.sysctl.max_hbh_opts_cnt)) { in ipv6_parse_hopopts()
1088 skb->transport_header += extlen; in ipv6_parse_hopopts()
1089 opt = IP6CB(skb); in ipv6_parse_hopopts()
1106 static void ipv6_push_rthdr0(struct sk_buff *skb, u8 *proto, in ipv6_push_rthdr0() argument
1115 phdr = skb_push(skb, (ihdr->rt_hdr.hdrlen + 1) << 3); in ipv6_push_rthdr0()
1131 static void ipv6_push_rthdr4(struct sk_buff *skb, u8 *proto, in ipv6_push_rthdr4() argument
1141 sr_phdr = skb_push(skb, plen); in ipv6_push_rthdr4()
1164 if (skb->dev) in ipv6_push_rthdr4()
1165 net = dev_net(skb->dev); in ipv6_push_rthdr4()
1166 else if (skb->sk) in ipv6_push_rthdr4()
1167 net = sock_net(skb->sk); in ipv6_push_rthdr4()
1180 static void ipv6_push_rthdr(struct sk_buff *skb, u8 *proto, in ipv6_push_rthdr() argument
1188 ipv6_push_rthdr0(skb, proto, opt, addr_p, saddr); in ipv6_push_rthdr()
1191 ipv6_push_rthdr4(skb, proto, opt, addr_p, saddr); in ipv6_push_rthdr()
1198 static void ipv6_push_exthdr(struct sk_buff *skb, u8 *proto, u8 type, struct ipv6_opt_hdr *opt) in ipv6_push_exthdr() argument
1200 struct ipv6_opt_hdr *h = skb_push(skb, ipv6_optlen(opt)); in ipv6_push_exthdr()
1207 void ipv6_push_nfrag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, in ipv6_push_nfrag_opts() argument
1212 ipv6_push_rthdr(skb, proto, opt->srcrt, daddr, saddr); in ipv6_push_nfrag_opts()
1218 ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst0opt); in ipv6_push_nfrag_opts()
1221 ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt); in ipv6_push_nfrag_opts()
1224 void ipv6_push_frag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, u8 *proto) in ipv6_push_frag_opts() argument
1227 ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst1opt); in ipv6_push_frag_opts()