xref: /openbmc/linux/net/ipv6/exthdrs_offload.c (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*2874c5fdSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
22207afc8SVlad Yasevich /*
32207afc8SVlad Yasevich  *	IPV6 GSO/GRO offload support
42207afc8SVlad Yasevich  *	Linux INET6 implementation
52207afc8SVlad Yasevich  *
62207afc8SVlad Yasevich  *      IPV6 Extension Header GSO/GRO support
72207afc8SVlad Yasevich  */
82207afc8SVlad Yasevich #include <net/protocol.h>
92207afc8SVlad Yasevich #include "ip6_offload.h"
102207afc8SVlad Yasevich 
112207afc8SVlad Yasevich static const struct net_offload rthdr_offload = {
122207afc8SVlad Yasevich 	.flags		=	INET6_PROTO_GSO_EXTHDR,
132207afc8SVlad Yasevich };
142207afc8SVlad Yasevich 
152207afc8SVlad Yasevich static const struct net_offload dstopt_offload = {
162207afc8SVlad Yasevich 	.flags		=	INET6_PROTO_GSO_EXTHDR,
172207afc8SVlad Yasevich };
182207afc8SVlad Yasevich 
ipv6_exthdrs_offload_init(void)192207afc8SVlad Yasevich int __init ipv6_exthdrs_offload_init(void)
202207afc8SVlad Yasevich {
212207afc8SVlad Yasevich 	int ret;
222207afc8SVlad Yasevich 
232207afc8SVlad Yasevich 	ret = inet6_add_offload(&rthdr_offload, IPPROTO_ROUTING);
24d2d273ffSAnton Nayshtut 	if (ret)
252207afc8SVlad Yasevich 		goto out;
262207afc8SVlad Yasevich 
272207afc8SVlad Yasevich 	ret = inet6_add_offload(&dstopt_offload, IPPROTO_DSTOPTS);
28d2d273ffSAnton Nayshtut 	if (ret)
292207afc8SVlad Yasevich 		goto out_rt;
302207afc8SVlad Yasevich 
312207afc8SVlad Yasevich out:
322207afc8SVlad Yasevich 	return ret;
332207afc8SVlad Yasevich 
342207afc8SVlad Yasevich out_rt:
35e41b0bedSDaniel Borkmann 	inet6_del_offload(&rthdr_offload, IPPROTO_ROUTING);
362207afc8SVlad Yasevich 	goto out;
372207afc8SVlad Yasevich }
38