summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-05-24 00:29:04 +0400
committerDavid S. Miller <davem@davemloft.net>2014-05-24 00:29:04 +0400
commit76fcee2438b90e473b67ea52b9b9e0648aa501f8 (patch)
tree842991b315c84e51fa4c2ececfba60e2992944b9 /include/linux
parent0c3592b821eb4069c8ab3934fc0e78f358d88ae4 (diff)
parent6b649feafe10b293f4bd5a74aca95faf625ae525 (diff)
downloadlinux-76fcee2438b90e473b67ea52b9b9e0648aa501f8.tar.xz
Merge branch 'inet_csums_part3'
Tom Herbert says: ==================== net: Checksum offload changes - Part III I am working on overhauling RX checksum offload. Goals of this effort are: - Specify what exactly it means when driver returns CHECKSUM_UNNECESSARY - Preserve CHECKSUM_COMPLETE through encapsulation layers - Don't do skb_checksum more than once per packet - Unify GRO and non-GRO csum verification as much as possible - Unify the checksum functions (checksum_init) - Simply code What is in this third patch set: - Remove sk_no_check from sunrpc (doesn't seem to have any effect) - Eliminate no_check from protosw. All protocols are using default of zero for this - Split sk_no_check into sk_no_check_tx and sk_no_check_rx - Make enabling of UDP6 more restrictive and explicit - Support zero UDP6 checksums in l2tp V2: Took out vxlan changes to set zero csums in IPv6, this will be in a later patch set. V3: Fixed bug in restricting UDP6 checksums. Please review carefully and test if possible, mucking with basic checksum functions is always a little precarious :-) ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/udp.h24
1 files changed, 23 insertions, 1 deletions
diff --git a/include/linux/udp.h b/include/linux/udp.h
index 42278bbf7a88..247cfdcc4b08 100644
--- a/include/linux/udp.h
+++ b/include/linux/udp.h
@@ -47,7 +47,9 @@ struct udp_sock {
#define udp_portaddr_node inet.sk.__sk_common.skc_portaddr_node
int pending; /* Any pending frames ? */
unsigned int corkflag; /* Cork is required */
- __u16 encap_type; /* Is this an Encapsulation socket? */
+ __u8 encap_type; /* Is this an Encapsulation socket? */
+ unsigned char no_check6_tx:1,/* Send zero UDP6 checksums on TX? */
+ no_check6_rx:1;/* Allow zero UDP6 checksums on RX? */
/*
* Following member retains the information to create a UDP header
* when the socket is uncorked.
@@ -76,6 +78,26 @@ static inline struct udp_sock *udp_sk(const struct sock *sk)
return (struct udp_sock *)sk;
}
+static inline void udp_set_no_check6_tx(struct sock *sk, bool val)
+{
+ udp_sk(sk)->no_check6_tx = val;
+}
+
+static inline void udp_set_no_check6_rx(struct sock *sk, bool val)
+{
+ udp_sk(sk)->no_check6_rx = val;
+}
+
+static inline bool udp_get_no_check6_tx(struct sock *sk)
+{
+ return udp_sk(sk)->no_check6_tx;
+}
+
+static inline bool udp_get_no_check6_rx(struct sock *sk)
+{
+ return udp_sk(sk)->no_check6_rx;
+}
+
#define udp_portaddr_for_each_entry(__sk, node, list) \
hlist_nulls_for_each_entry(__sk, node, list, __sk_common.skc_portaddr_node)