diff options
Diffstat (limited to 'include/net/ipv6.h')
| -rw-r--r-- | include/net/ipv6.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 4292929392b0..4c9fe224d73b 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -671,6 +671,7 @@ static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_add | |||
| 671 | return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); | 671 | return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); |
| 672 | } | 672 | } |
| 673 | 673 | ||
| 674 | void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt); | ||
| 674 | void ipv6_proxy_select_ident(struct sk_buff *skb); | 675 | void ipv6_proxy_select_ident(struct sk_buff *skb); |
| 675 | 676 | ||
| 676 | int ip6_dst_hoplimit(struct dst_entry *dst); | 677 | int ip6_dst_hoplimit(struct dst_entry *dst); |
| @@ -708,7 +709,7 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb, | |||
| 708 | __be32 flowlabel, bool autolabel) | 709 | __be32 flowlabel, bool autolabel) |
| 709 | { | 710 | { |
| 710 | if (!flowlabel && (autolabel || net->ipv6.sysctl.auto_flowlabels)) { | 711 | if (!flowlabel && (autolabel || net->ipv6.sysctl.auto_flowlabels)) { |
| 711 | __be32 hash; | 712 | u32 hash; |
| 712 | 713 | ||
| 713 | hash = skb_get_hash(skb); | 714 | hash = skb_get_hash(skb); |
| 714 | 715 | ||
| @@ -718,7 +719,7 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb, | |||
| 718 | */ | 719 | */ |
| 719 | hash ^= hash >> 12; | 720 | hash ^= hash >> 12; |
| 720 | 721 | ||
| 721 | flowlabel = hash & IPV6_FLOWLABEL_MASK; | 722 | flowlabel = (__force __be32)hash & IPV6_FLOWLABEL_MASK; |
| 722 | } | 723 | } |
| 723 | 724 | ||
| 724 | return flowlabel; | 725 | return flowlabel; |
| @@ -788,6 +789,25 @@ int ip6_push_pending_frames(struct sock *sk); | |||
| 788 | 789 | ||
| 789 | void ip6_flush_pending_frames(struct sock *sk); | 790 | void ip6_flush_pending_frames(struct sock *sk); |
| 790 | 791 | ||
| 792 | int ip6_send_skb(struct sk_buff *skb); | ||
| 793 | |||
| 794 | struct sk_buff *__ip6_make_skb(struct sock *sk, struct sk_buff_head *queue, | ||
| 795 | struct inet_cork_full *cork, | ||
| 796 | struct inet6_cork *v6_cork); | ||
| 797 | struct sk_buff *ip6_make_skb(struct sock *sk, | ||
| 798 | int getfrag(void *from, char *to, int offset, | ||
| 799 | int len, int odd, struct sk_buff *skb), | ||
| 800 | void *from, int length, int transhdrlen, | ||
| 801 | int hlimit, int tclass, struct ipv6_txoptions *opt, | ||
| 802 | struct flowi6 *fl6, struct rt6_info *rt, | ||
| 803 | unsigned int flags, int dontfrag); | ||
| 804 | |||
| 805 | static inline struct sk_buff *ip6_finish_skb(struct sock *sk) | ||
| 806 | { | ||
| 807 | return __ip6_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork, | ||
| 808 | &inet6_sk(sk)->cork); | ||
| 809 | } | ||
| 810 | |||
| 791 | int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6); | 811 | int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6); |
| 792 | struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, | 812 | struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, |
| 793 | const struct in6_addr *final_dst); | 813 | const struct in6_addr *final_dst); |
