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