Re: Current with RSS and EPAIR and without INET6.

From: Zhenlei Huang <zlei.huang_at_gmail.com>
Date: Mon, 28 Feb 2022 07:12:58 UTC

> On Feb 27, 2022, at 8:59 PM, Santiago Martinez <sm@codenetworks.net> wrote:
> 
> Hi Everyone, 
> 
> While testing RSS and EPAIR I have find out that it is required to have kernel compiled with INET6 when enabling RSS+EPAIR.
> 
> I usually remove everything that i do not use from the kernel, like SCTP and INET6, etc. 
> 
> After compiling with "option RSS" i noticed that iocage failed to start, checking the dmesg buffer clearly showed why.
> 
> [321] link_elf_obj: symbol rss_soft_m2cpuid_v6 undefined 
> [321] linker_load_file: /boot/kernel/if_epair.ko - unsupported file type
> 
> I added two ifdef INET6 on the if_epair and solve the issue, still not sure if completely correct.
> 
> Best regards.
> 
> Santi
> 
> diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c 
> index 629de981d5b0..235e5098ebd8 100644 
> --- a/sys/net/if_epair.c 
> +++ b/sys/net/if_epair.c 
> @@ -74,6 +74,8 @@ __FBSDID("$FreeBSD$"); 
> #ifdef RSS 
> #include <net/rss_config.h> 
> #include <netinet/in_rss.h> 
> +#endif 
> +#ifdef INET6 
> #include <netinet6/in6_rss.h> 
> #endif 
> 
The newly added ifdef should be wrapped around by RSS. 
And also is "opt_inet6.h" header required?
And maybe ifdef INET is also required as someone need IPv4 only.

#ifdef RSS
#include <net/rss_config.h>
#include <netinet/in_rss.h> 
+#ifdef INET6 
#include <netinet6/in6_rss.h> 
+#endif 
#endif 

> #include <net/vnet.h> 
> @@ -220,9 +222,11 @@ epair_menq(struct mbuf *m, struct epair_softc *osc) 
>                case ETHERTYPE_IP: 
>                        rss_soft_m2cpuid_v4(m, 0, &bucket); 
>                        break; 
> +#ifdef INET6 
>                case ETHERTYPE_IPV6: 
>                        rss_soft_m2cpuid_v6(m, 0, &bucket); 
>                        break; 
> +#endif 
>                default: 
>                        bucket = 0; 
>                        break;
> 
> 
> 
> 
> 
> 
> 
> 
>