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 Yasevichint __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