| // SPDX-License-Identifier: GPL-2.0-or-later | |
| /* | |
| * IPV6 GSO/GRO offload support | |
| * Linux INET6 implementation | |
| * | |
| * IPV6 Extension Header GSO/GRO support | |
| */ | |
| #include <net/protocol.h> | |
| #include "ip6_offload.h" | |
| static const struct net_offload rthdr_offload = { | |
| .flags = INET6_PROTO_GSO_EXTHDR, | |
| }; | |
| static const struct net_offload dstopt_offload = { | |
| .flags = INET6_PROTO_GSO_EXTHDR, | |
| }; | |
| int __init ipv6_exthdrs_offload_init(void) | |
| { | |
| int ret; | |
| ret = inet6_add_offload(&rthdr_offload, IPPROTO_ROUTING); | |
| if (ret) | |
| goto out; | |
| ret = inet6_add_offload(&dstopt_offload, IPPROTO_DSTOPTS); | |
| if (ret) | |
| goto out_rt; | |
| out: | |
| return ret; | |
| out_rt: | |
| inet6_del_offload(&rthdr_offload, IPPROTO_ROUTING); | |
| goto out; | |
| } |