cregit-Linux how code gets into the kernel

Release 4.12 include/net/ip6_checksum.h

Directory: include/net
/*
 * INET         An implementation of the TCP/IP protocol suite for the LINUX
 *              operating system.  INET is implemented using the  BSD Socket
 *              interface as the means of communication with the user level.
 *
 *              Checksumming functions for IPv6
 *
 * Authors:     Jorge Cwik, <jorge@laser.satlink.net>
 *              Arnt Gulbrandsen, <agulbra@nvg.unit.no>
 *              Borrows very liberally from tcp.c and ip.c, see those
 *              files for more names.
 *
 *              This program is free software; you can redistribute it and/or
 *              modify it under the terms of the GNU General Public License
 *              as published by the Free Software Foundation; either version
 *              2 of the License, or (at your option) any later version.
 */

/*
 *      Fixes:
 *
 *      Ralf Baechle                    :       generic ipv6 checksum
 *      <ralf@waldorf-gmbh.de>
 */

#ifndef _CHECKSUM_IPV6_H

#define _CHECKSUM_IPV6_H

#include <asm/types.h>
#include <asm/byteorder.h>
#include <net/ip.h>
#include <asm/checksum.h>
#include <linux/in6.h>
#include <linux/tcp.h>
#include <linux/ipv6.h>

#ifndef _HAVE_ARCH_IPV6_CSUM
__sum16 csum_ipv6_magic(const struct in6_addr *saddr,
			const struct in6_addr *daddr,
			__u32 len, __u8 proto, __wsum csum);
#endif


static inline __wsum ip6_compute_pseudo(struct sk_buff *skb, int proto) { return ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr, skb->len, proto, 0)); }

Contributors

PersonTokensPropCommitsCommitProp
Tom Herbert47100.00%1100.00%
Total47100.00%1100.00%


static inline __wsum ip6_gro_compute_pseudo(struct sk_buff *skb, int proto) { const struct ipv6hdr *iph = skb_gro_network_header(skb); return ~csum_unfold(csum_ipv6_magic(&iph->saddr, &iph->daddr, skb_gro_len(skb), proto, 0)); }

Contributors

PersonTokensPropCommitsCommitProp
Tom Herbert53100.00%1100.00%
Total53100.00%1100.00%


static __inline__ __sum16 tcp_v6_check(int len, const struct in6_addr *saddr, const struct in6_addr *daddr, __wsum base) { return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base); }

Contributors

PersonTokensPropCommitsCommitProp
Vlad Yasevich39100.00%1100.00%
Total39100.00%1100.00%


static inline void __tcp_v6_send_check(struct sk_buff *skb, const struct in6_addr *saddr, const struct in6_addr *daddr) { struct tcphdr *th = tcp_hdr(skb); if (skb->ip_summed == CHECKSUM_PARTIAL) { th->check = ~tcp_v6_check(skb->len, saddr, daddr, 0); skb->csum_start = skb_transport_header(skb) - skb->head; skb->csum_offset = offsetof(struct tcphdr, check); } else { th->check = tcp_v6_check(skb->len, saddr, daddr, csum_partial(th, th->doff << 2, skb->csum)); } }

Contributors

PersonTokensPropCommitsCommitProp
Vlad Yasevich120100.00%1100.00%
Total120100.00%1100.00%

#if IS_ENABLED(CONFIG_IPV6)
static inline void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb) { struct ipv6_pinfo *np = inet6_sk(sk); __tcp_v6_send_check(skb, &np->saddr, &sk->sk_v6_daddr); }

Contributors

PersonTokensPropCommitsCommitProp
Vlad Yasevich4095.24%150.00%
Eric Dumazet24.76%150.00%
Total42100.00%2100.00%

#endif
static inline __sum16 udp_v6_check(int len, const struct in6_addr *saddr, const struct in6_addr *daddr, __wsum base) { return csum_ipv6_magic(saddr, daddr, len, IPPROTO_UDP, base); }

Contributors

PersonTokensPropCommitsCommitProp
Tom Herbert39100.00%1100.00%
Total39100.00%1100.00%

void udp6_set_csum(bool nocheck, struct sk_buff *skb, const struct in6_addr *saddr, const struct in6_addr *daddr, int len); int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, int proto); #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Vlad Yasevich20545.25%110.00%
Tom Herbert16636.64%330.00%
Arnaldo Carvalho de Melo4810.60%110.00%
Américo Wang183.97%110.00%
Eric Dumazet102.21%220.00%
Al Viro51.10%110.00%
Alexander Duyck10.22%110.00%
Total453100.00%10100.00%
Directory: include/net
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.