Lines Matching full:skb
65 static bool ip6_tlvopt_unknown(struct sk_buff *skb, int optoff, in ip6_tlvopt_unknown() argument
79 switch ((skb_network_header(skb)[optoff] & 0xC0) >> 6) { in ip6_tlvopt_unknown()
90 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) in ip6_tlvopt_unknown()
94 icmpv6_param_prob_reason(skb, ICMPV6_UNK_OPTION, optoff, in ip6_tlvopt_unknown()
100 kfree_skb_reason(skb, SKB_DROP_REASON_UNHANDLED_PROTO); in ip6_tlvopt_unknown()
104 static bool ipv6_hop_ra(struct sk_buff *skb, int optoff);
105 static bool ipv6_hop_ioam(struct sk_buff *skb, int optoff);
106 static bool ipv6_hop_jumbo(struct sk_buff *skb, int optoff);
107 static bool ipv6_hop_calipso(struct sk_buff *skb, int optoff);
109 static bool ipv6_dest_hao(struct sk_buff *skb, int optoff);
115 struct sk_buff *skb, in ip6_parse_tlv() argument
118 int len = (skb_transport_header(skb)[1] + 1) << 3; in ip6_parse_tlv()
119 const unsigned char *nh = skb_network_header(skb); in ip6_parse_tlv()
120 int off = skb_network_header_len(skb); in ip6_parse_tlv()
175 if (!ipv6_hop_ra(skb, off)) in ip6_parse_tlv()
179 if (!ipv6_hop_ioam(skb, off)) in ip6_parse_tlv()
182 nh = skb_network_header(skb); in ip6_parse_tlv()
185 if (!ipv6_hop_jumbo(skb, off)) in ip6_parse_tlv()
189 if (!ipv6_hop_calipso(skb, off)) in ip6_parse_tlv()
193 if (!ip6_tlvopt_unknown(skb, off, in ip6_parse_tlv()
202 if (!ipv6_dest_hao(skb, off)) in ip6_parse_tlv()
207 if (!ip6_tlvopt_unknown(skb, off, in ip6_parse_tlv()
222 kfree_skb_reason(skb, SKB_DROP_REASON_IP_INHDR); in ip6_parse_tlv()
231 static bool ipv6_dest_hao(struct sk_buff *skb, int optoff) in ipv6_dest_hao() argument
234 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_dest_hao()
235 struct ipv6hdr *ipv6h = ipv6_hdr(skb); in ipv6_dest_hao()
246 hao = (struct ipv6_destopt_hao *)(skb_network_header(skb) + optoff); in ipv6_dest_hao()
262 ret = xfrm6_input_addr(skb, (xfrm_address_t *)&ipv6h->daddr, in ipv6_dest_hao()
269 if (skb_cloned(skb)) { in ipv6_dest_hao()
270 if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) in ipv6_dest_hao()
274 hao = (struct ipv6_destopt_hao *)(skb_network_header(skb) + in ipv6_dest_hao()
276 ipv6h = ipv6_hdr(skb); in ipv6_dest_hao()
279 if (skb->ip_summed == CHECKSUM_COMPLETE) in ipv6_dest_hao()
280 skb->ip_summed = CHECKSUM_NONE; in ipv6_dest_hao()
284 if (skb->tstamp == 0) in ipv6_dest_hao()
285 __net_timestamp(skb); in ipv6_dest_hao()
290 kfree_skb_reason(skb, reason); in ipv6_dest_hao()
295 static int ipv6_destopt_rcv(struct sk_buff *skb) in ipv6_destopt_rcv() argument
297 struct inet6_dev *idev = __in6_dev_get(skb->dev); in ipv6_destopt_rcv()
298 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_destopt_rcv()
302 struct dst_entry *dst = skb_dst(skb); in ipv6_destopt_rcv()
303 struct net *net = dev_net(skb->dev); in ipv6_destopt_rcv()
306 if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || in ipv6_destopt_rcv()
307 !pskb_may_pull(skb, (skb_transport_offset(skb) + in ipv6_destopt_rcv()
308 ((skb_transport_header(skb)[1] + 1) << 3)))) { in ipv6_destopt_rcv()
312 kfree_skb(skb); in ipv6_destopt_rcv()
316 extlen = (skb_transport_header(skb)[1] + 1) << 3; in ipv6_destopt_rcv()
320 opt->lastopt = opt->dst1 = skb_network_header_len(skb); in ipv6_destopt_rcv()
325 if (ip6_parse_tlv(false, skb, net->ipv6.sysctl.max_dst_opts_cnt)) { in ipv6_destopt_rcv()
326 skb->transport_header += extlen; in ipv6_destopt_rcv()
327 opt = IP6CB(skb); in ipv6_destopt_rcv()
340 static void seg6_update_csum(struct sk_buff *skb) in seg6_update_csum() argument
350 hdr = (struct ipv6_sr_hdr *)skb_transport_header(skb); in seg6_update_csum()
359 /* update skb csum with diff resulting from seg_left decrement */ in seg6_update_csum()
361 update_csum_diff4(skb, from, to); in seg6_update_csum()
365 update_csum_diff16(skb, (__be32 *)(&ipv6_hdr(skb)->daddr), in seg6_update_csum()
369 static int ipv6_srh_rcv(struct sk_buff *skb) in ipv6_srh_rcv() argument
371 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_srh_rcv()
372 struct net *net = dev_net(skb->dev); in ipv6_srh_rcv()
378 hdr = (struct ipv6_sr_hdr *)skb_transport_header(skb); in ipv6_srh_rcv()
380 idev = __in6_dev_get(skb->dev); in ipv6_srh_rcv()
386 kfree_skb(skb); in ipv6_srh_rcv()
391 if (!seg6_hmac_validate_skb(skb)) { in ipv6_srh_rcv()
392 kfree_skb(skb); in ipv6_srh_rcv()
402 skb_postpull_rcsum(skb, skb_network_header(skb), in ipv6_srh_rcv()
403 skb_network_header_len(skb)); in ipv6_srh_rcv()
404 skb_pull(skb, offset); in ipv6_srh_rcv()
405 skb_postpull_rcsum(skb, skb_transport_header(skb), in ipv6_srh_rcv()
408 skb_reset_network_header(skb); in ipv6_srh_rcv()
409 skb_reset_transport_header(skb); in ipv6_srh_rcv()
410 skb->encapsulation = 0; in ipv6_srh_rcv()
412 skb->protocol = htons(ETH_P_IP); in ipv6_srh_rcv()
413 __skb_tunnel_rx(skb, skb->dev, net); in ipv6_srh_rcv()
415 netif_rx(skb); in ipv6_srh_rcv()
419 opt->srcrt = skb_network_header_len(skb); in ipv6_srh_rcv()
421 skb->transport_header += (hdr->hdrlen + 1) << 3; in ipv6_srh_rcv()
422 opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb); in ipv6_srh_rcv()
429 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_srh_rcv()
431 skb_network_header(skb))); in ipv6_srh_rcv()
435 if (skb_cloned(skb)) { in ipv6_srh_rcv()
436 if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { in ipv6_srh_rcv()
437 __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), in ipv6_srh_rcv()
439 kfree_skb(skb); in ipv6_srh_rcv()
443 hdr = (struct ipv6_sr_hdr *)skb_transport_header(skb); in ipv6_srh_rcv()
449 skb_push(skb, sizeof(struct ipv6hdr)); in ipv6_srh_rcv()
451 if (skb->ip_summed == CHECKSUM_COMPLETE) in ipv6_srh_rcv()
452 seg6_update_csum(skb); in ipv6_srh_rcv()
454 ipv6_hdr(skb)->daddr = *addr; in ipv6_srh_rcv()
456 ip6_route_input(skb); in ipv6_srh_rcv()
458 if (skb_dst(skb)->error) { in ipv6_srh_rcv()
459 dst_input(skb); in ipv6_srh_rcv()
463 if (skb_dst_dev(skb)->flags & IFF_LOOPBACK) { in ipv6_srh_rcv()
464 if (ipv6_hdr(skb)->hop_limit <= 1) { in ipv6_srh_rcv()
466 icmpv6_send(skb, ICMPV6_TIME_EXCEED, in ipv6_srh_rcv()
468 kfree_skb(skb); in ipv6_srh_rcv()
471 ipv6_hdr(skb)->hop_limit--; in ipv6_srh_rcv()
473 skb_pull(skb, sizeof(struct ipv6hdr)); in ipv6_srh_rcv()
477 dst_input(skb); in ipv6_srh_rcv()
482 static int ipv6_rpl_srh_rcv(struct sk_buff *skb) in ipv6_rpl_srh_rcv() argument
485 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_rpl_srh_rcv()
486 struct net *net = dev_net(skb->dev); in ipv6_rpl_srh_rcv()
495 idev = __in6_dev_get(skb->dev); in ipv6_rpl_srh_rcv()
500 kfree_skb(skb); in ipv6_rpl_srh_rcv()
505 hdr = (struct ipv6_rpl_sr_hdr *)skb_transport_header(skb); in ipv6_rpl_srh_rcv()
511 skb_postpull_rcsum(skb, skb_network_header(skb), in ipv6_rpl_srh_rcv()
512 skb_network_header_len(skb)); in ipv6_rpl_srh_rcv()
513 skb_pull(skb, offset); in ipv6_rpl_srh_rcv()
514 skb_postpull_rcsum(skb, skb_transport_header(skb), in ipv6_rpl_srh_rcv()
517 skb_reset_network_header(skb); in ipv6_rpl_srh_rcv()
518 skb_reset_transport_header(skb); in ipv6_rpl_srh_rcv()
519 skb->encapsulation = 0; in ipv6_rpl_srh_rcv()
521 __skb_tunnel_rx(skb, skb->dev, net); in ipv6_rpl_srh_rcv()
523 netif_rx(skb); in ipv6_rpl_srh_rcv()
527 opt->srcrt = skb_network_header_len(skb); in ipv6_rpl_srh_rcv()
529 skb->transport_header += (hdr->hdrlen + 1) << 3; in ipv6_rpl_srh_rcv()
530 opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb); in ipv6_rpl_srh_rcv()
542 kfree_skb(skb); in ipv6_rpl_srh_rcv()
548 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_rpl_srh_rcv()
550 skb_network_header(skb))); in ipv6_rpl_srh_rcv()
559 kfree_skb(skb); in ipv6_rpl_srh_rcv()
564 ipv6_rpl_srh_decompress(ohdr, hdr, &ipv6_hdr(skb)->daddr, n); in ipv6_rpl_srh_rcv()
568 kfree_skb(skb); in ipv6_rpl_srh_rcv()
575 icmpv6_send(skb, ICMPV6_PARAMPROB, 0, 0); in ipv6_rpl_srh_rcv()
576 kfree_skb(skb); in ipv6_rpl_srh_rcv()
581 swap(ipv6_hdr(skb)->daddr, ohdr->rpl_segaddr[i]); in ipv6_rpl_srh_rcv()
583 ipv6_rpl_srh_compress(chdr, ohdr, &ipv6_hdr(skb)->daddr, n); in ipv6_rpl_srh_rcv()
585 oldhdr = ipv6_hdr(skb); in ipv6_rpl_srh_rcv()
587 skb_pull(skb, ((hdr->hdrlen + 1) << 3)); in ipv6_rpl_srh_rcv()
588 skb_postpull_rcsum(skb, oldhdr, in ipv6_rpl_srh_rcv()
591 if (pskb_expand_head(skb, sizeof(struct ipv6hdr) + ((chdr->hdrlen + 1) << 3), 0, in ipv6_rpl_srh_rcv()
593 __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_OUTDISCARDS); in ipv6_rpl_srh_rcv()
594 kfree_skb(skb); in ipv6_rpl_srh_rcv()
599 oldhdr = ipv6_hdr(skb); in ipv6_rpl_srh_rcv()
601 skb_push(skb, ((chdr->hdrlen + 1) << 3) + sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
602 skb_reset_network_header(skb); in ipv6_rpl_srh_rcv()
603 skb_mac_header_rebuild(skb); in ipv6_rpl_srh_rcv()
604 skb_set_transport_header(skb, sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
606 memmove(ipv6_hdr(skb), oldhdr, sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
607 memcpy(skb_transport_header(skb), chdr, (chdr->hdrlen + 1) << 3); in ipv6_rpl_srh_rcv()
609 ipv6_hdr(skb)->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
610 skb_postpush_rcsum(skb, ipv6_hdr(skb), in ipv6_rpl_srh_rcv()
615 ip6_route_input(skb); in ipv6_rpl_srh_rcv()
617 if (skb_dst(skb)->error) { in ipv6_rpl_srh_rcv()
618 dst_input(skb); in ipv6_rpl_srh_rcv()
622 if (skb_dst_dev(skb)->flags & IFF_LOOPBACK) { in ipv6_rpl_srh_rcv()
623 if (ipv6_hdr(skb)->hop_limit <= 1) { in ipv6_rpl_srh_rcv()
625 icmpv6_send(skb, ICMPV6_TIME_EXCEED, in ipv6_rpl_srh_rcv()
627 kfree_skb(skb); in ipv6_rpl_srh_rcv()
630 ipv6_hdr(skb)->hop_limit--; in ipv6_rpl_srh_rcv()
632 skb_pull(skb, sizeof(struct ipv6hdr)); in ipv6_rpl_srh_rcv()
636 dst_input(skb); in ipv6_rpl_srh_rcv()
646 static int ipv6_rthdr_rcv(struct sk_buff *skb) in ipv6_rthdr_rcv() argument
648 struct inet6_dev *idev = __in6_dev_get(skb->dev); in ipv6_rthdr_rcv()
649 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_rthdr_rcv()
654 struct net *net = dev_net(skb->dev); in ipv6_rthdr_rcv()
663 if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || in ipv6_rthdr_rcv()
664 !pskb_may_pull(skb, (skb_transport_offset(skb) + in ipv6_rthdr_rcv()
665 ((skb_transport_header(skb)[1] + 1) << 3)))) { in ipv6_rthdr_rcv()
667 kfree_skb(skb); in ipv6_rthdr_rcv()
671 hdr = (struct ipv6_rt_hdr *)skb_transport_header(skb); in ipv6_rthdr_rcv()
673 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr) || in ipv6_rthdr_rcv()
674 skb->pkt_type != PACKET_HOST) { in ipv6_rthdr_rcv()
676 kfree_skb(skb); in ipv6_rthdr_rcv()
683 return ipv6_srh_rcv(skb); in ipv6_rthdr_rcv()
686 return ipv6_rpl_srh_rcv(skb); in ipv6_rthdr_rcv()
702 kfree_skb(skb); in ipv6_rthdr_rcv()
711 opt->lastopt = opt->srcrt = skb_network_header_len(skb); in ipv6_rthdr_rcv()
712 skb->transport_header += (hdr->hdrlen + 1) << 3; in ipv6_rthdr_rcv()
715 opt->nhoff = (&hdr->nexthdr) - skb_network_header(skb); in ipv6_rthdr_rcv()
727 kfree_skb(skb); in ipv6_rthdr_rcv()
745 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_rthdr_rcv()
747 skb_network_header(skb))); in ipv6_rthdr_rcv()
754 if (skb_cloned(skb)) { in ipv6_rthdr_rcv()
756 if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { in ipv6_rthdr_rcv()
757 __IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), in ipv6_rthdr_rcv()
759 kfree_skb(skb); in ipv6_rthdr_rcv()
762 hdr = (struct ipv6_rt_hdr *)skb_transport_header(skb); in ipv6_rthdr_rcv()
765 if (skb->ip_summed == CHECKSUM_COMPLETE) in ipv6_rthdr_rcv()
766 skb->ip_summed = CHECKSUM_NONE; in ipv6_rthdr_rcv()
777 if (xfrm6_input_addr(skb, (xfrm_address_t *)addr, in ipv6_rthdr_rcv()
778 (xfrm_address_t *)&ipv6_hdr(skb)->saddr, in ipv6_rthdr_rcv()
781 kfree_skb(skb); in ipv6_rthdr_rcv()
784 if (!ipv6_chk_home_addr(skb_dst_dev_net(skb), addr)) { in ipv6_rthdr_rcv()
786 kfree_skb(skb); in ipv6_rthdr_rcv()
797 kfree_skb(skb); in ipv6_rthdr_rcv()
801 swap(*addr, ipv6_hdr(skb)->daddr); in ipv6_rthdr_rcv()
803 ip6_route_input(skb); in ipv6_rthdr_rcv()
804 if (skb_dst(skb)->error) { in ipv6_rthdr_rcv()
805 skb_push(skb, -skb_network_offset(skb)); in ipv6_rthdr_rcv()
806 dst_input(skb); in ipv6_rthdr_rcv()
810 if (skb_dst_dev(skb)->flags & IFF_LOOPBACK) { in ipv6_rthdr_rcv()
811 if (ipv6_hdr(skb)->hop_limit <= 1) { in ipv6_rthdr_rcv()
813 icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, in ipv6_rthdr_rcv()
815 kfree_skb(skb); in ipv6_rthdr_rcv()
818 ipv6_hdr(skb)->hop_limit--; in ipv6_rthdr_rcv()
822 skb_push(skb, -skb_network_offset(skb)); in ipv6_rthdr_rcv()
823 dst_input(skb); in ipv6_rthdr_rcv()
828 icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, in ipv6_rthdr_rcv()
829 (&hdr->type) - skb_network_header(skb)); in ipv6_rthdr_rcv()
886 static bool ipv6_hop_ra(struct sk_buff *skb, int optoff) in ipv6_hop_ra() argument
888 const unsigned char *nh = skb_network_header(skb); in ipv6_hop_ra()
891 IP6CB(skb)->flags |= IP6SKB_ROUTERALERT; in ipv6_hop_ra()
892 memcpy(&IP6CB(skb)->ra, nh + optoff + 2, sizeof(IP6CB(skb)->ra)); in ipv6_hop_ra()
897 kfree_skb_reason(skb, SKB_DROP_REASON_IP_INHDR); in ipv6_hop_ra()
903 static bool ipv6_hop_ioam(struct sk_buff *skb, int optoff) in ipv6_hop_ioam() argument
914 if (!READ_ONCE(__in6_dev_get(skb->dev)->cnf.ioam6_enabled)) in ipv6_hop_ioam()
918 hdr = (struct ioam6_hdr *)(skb_network_header(skb) + optoff); in ipv6_hop_ioam()
934 ns = ioam6_namespace(dev_net(skb->dev), trace->namespace_id); in ipv6_hop_ioam()
938 if (!skb_valid_dst(skb)) in ipv6_hop_ioam()
939 ip6_route_input(skb); in ipv6_hop_ioam()
942 if (skb_ensure_writable(skb, optoff + 2 + hdr->opt_len)) in ipv6_hop_ioam()
946 trace = (struct ioam6_trace_hdr *)(skb_network_header(skb) in ipv6_hop_ioam()
949 ioam6_fill_trace_data(skb, ns, trace, true); in ipv6_hop_ioam()
951 ioam6_event(IOAM6_EVENT_TRACE, dev_net(skb->dev), in ipv6_hop_ioam()
962 kfree_skb_reason(skb, SKB_DROP_REASON_IP_INHDR); in ipv6_hop_ioam()
968 static bool ipv6_hop_jumbo(struct sk_buff *skb, int optoff) in ipv6_hop_jumbo() argument
970 const unsigned char *nh = skb_network_header(skb); in ipv6_hop_jumbo()
983 icmpv6_param_prob_reason(skb, ICMPV6_HDR_FIELD, optoff + 2, in ipv6_hop_jumbo()
987 if (ipv6_hdr(skb)->payload_len) { in ipv6_hop_jumbo()
988 icmpv6_param_prob_reason(skb, ICMPV6_HDR_FIELD, optoff, in ipv6_hop_jumbo()
993 if (pkt_len > skb->len - sizeof(struct ipv6hdr)) { in ipv6_hop_jumbo()
998 if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr))) in ipv6_hop_jumbo()
1001 IP6CB(skb)->flags |= IP6SKB_JUMBOGRAM; in ipv6_hop_jumbo()
1005 kfree_skb_reason(skb, reason); in ipv6_hop_jumbo()
1011 static bool ipv6_hop_calipso(struct sk_buff *skb, int optoff) in ipv6_hop_calipso() argument
1013 const unsigned char *nh = skb_network_header(skb); in ipv6_hop_calipso()
1021 if (!calipso_validate(skb, nh + optoff)) in ipv6_hop_calipso()
1027 kfree_skb_reason(skb, SKB_DROP_REASON_IP_INHDR); in ipv6_hop_calipso()
1031 int ipv6_parse_hopopts(struct sk_buff *skb) in ipv6_parse_hopopts() argument
1033 struct inet6_skb_parm *opt = IP6CB(skb); in ipv6_parse_hopopts()
1034 struct net *net = dev_net(skb->dev); in ipv6_parse_hopopts()
1038 * skb_network_header(skb) is equal to skb->data, and in ipv6_parse_hopopts()
1039 * skb_network_header_len(skb) is always equal to in ipv6_parse_hopopts()
1043 if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + 8) || in ipv6_parse_hopopts()
1044 !pskb_may_pull(skb, (sizeof(struct ipv6hdr) + in ipv6_parse_hopopts()
1045 ((skb_transport_header(skb)[1] + 1) << 3)))) { in ipv6_parse_hopopts()
1047 kfree_skb(skb); in ipv6_parse_hopopts()
1051 extlen = (skb_transport_header(skb)[1] + 1) << 3; in ipv6_parse_hopopts()
1056 if (ip6_parse_tlv(true, skb, net->ipv6.sysctl.max_hbh_opts_cnt)) { in ipv6_parse_hopopts()
1057 skb->transport_header += extlen; in ipv6_parse_hopopts()
1058 opt = IP6CB(skb); in ipv6_parse_hopopts()
1068 * "build" functions work when skb is filled from head to tail (datagram)
1075 static void ipv6_push_rthdr0(struct sk_buff *skb, u8 *proto, in ipv6_push_rthdr0() argument
1084 phdr = skb_push(skb, (ihdr->rt_hdr.hdrlen + 1) << 3); in ipv6_push_rthdr0()
1100 static void ipv6_push_rthdr4(struct sk_buff *skb, u8 *proto, in ipv6_push_rthdr4() argument
1110 sr_phdr = skb_push(skb, plen); in ipv6_push_rthdr4()
1133 if (skb->dev) in ipv6_push_rthdr4()
1134 net = dev_net(skb->dev); in ipv6_push_rthdr4()
1135 else if (skb->sk) in ipv6_push_rthdr4()
1136 net = sock_net(skb->sk); in ipv6_push_rthdr4()
1149 static void ipv6_push_rthdr(struct sk_buff *skb, u8 *proto, in ipv6_push_rthdr() argument
1157 ipv6_push_rthdr0(skb, proto, opt, addr_p, saddr); in ipv6_push_rthdr()
1160 ipv6_push_rthdr4(skb, proto, opt, addr_p, saddr); in ipv6_push_rthdr()
1167 static void ipv6_push_exthdr(struct sk_buff *skb, u8 *proto, u8 type, struct ipv6_opt_hdr *opt) in ipv6_push_exthdr() argument
1169 struct ipv6_opt_hdr *h = skb_push(skb, ipv6_optlen(opt)); in ipv6_push_exthdr()
1176 void ipv6_push_nfrag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, in ipv6_push_nfrag_opts() argument
1181 ipv6_push_rthdr(skb, proto, opt->srcrt, daddr, saddr); in ipv6_push_nfrag_opts()
1187 ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst0opt); in ipv6_push_nfrag_opts()
1190 ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt); in ipv6_push_nfrag_opts()
1193 void ipv6_push_frag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, u8 *proto) in ipv6_push_frag_opts() argument
1196 ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst1opt); in ipv6_push_frag_opts()