1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * IPV6 GSO/GRO offload support 4 * Linux INET6 implementation 5 * 6 * IPV6 Extension Header GSO/GRO support 7 */ 8 #include <net/protocol.h> 9 #include "ip6_offload.h" 10 11 static const struct net_offload rthdr_offload = { 12 .flags = INET6_PROTO_GSO_EXTHDR, 13 }; 14 15 static const struct net_offload dstopt_offload = { 16 .flags = INET6_PROTO_GSO_EXTHDR, 17 }; 18 19 static const struct net_offload hbh_offload = { 20 .flags = INET6_PROTO_GSO_EXTHDR, 21 }; 22 ipv6_exthdrs_offload_init(void)23int __init ipv6_exthdrs_offload_init(void) 24 { 25 int ret; 26 27 ret = inet6_add_offload(&rthdr_offload, IPPROTO_ROUTING); 28 if (ret) 29 goto out; 30 31 ret = inet6_add_offload(&dstopt_offload, IPPROTO_DSTOPTS); 32 if (ret) 33 goto out_rt; 34 35 ret = inet6_add_offload(&hbh_offload, IPPROTO_HOPOPTS); 36 if (ret) 37 goto out_dstopts; 38 39 out: 40 return ret; 41 42 out_dstopts: 43 inet6_del_offload(&dstopt_offload, IPPROTO_DSTOPTS); 44 45 out_rt: 46 inet6_del_offload(&rthdr_offload, IPPROTO_ROUTING); 47 goto out; 48 } 49