This patch enables the ability to load multiple versions of the same TCP stack.
It lets us write simple Makefiles like this:
```
#
# $FreeBSD$
#
STACKNAME= bbr_17q22
KMOD= tcp_${STACKNAME}
SRCS= bbr.c sack_filter.c
#
# Enable full debugging
#
#CFLAGS += -g
CFLAGS+= -DMODNAME=${KMOD}
CFLAGS+= -DSTACKNAME=${STACKNAME}
PREFIX_SYMS= ${KMOD}_
.include <bsd.kmod.mk>
```
In the code, we can register non-conflicting module names like this:
```
MODULE_VERSION(MODNAME, 1);
DECLARE_MODULE(MODNAME, tcp_bbr, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY);
```
We can enable multiple stack names like this:
```
static const char *my_stack_names[] = {
__XSTRING(STACKNAME),
#ifdef STACKALIAS
__XSTRING(STACKALIAS),
#endif
};
...
num_stacks = nitems(my_stack_names);
err = register_tcp_functions_as_names(&__tcp_mystack, M_WAITOK,
my_stack_names, &num_stacks);
```
To do this, it:
- Supports symbol mangling to avoid overlapping symbols between the multiple modules.
- Lets us use a macro as the module name in the DECLARE_MACRO() and MACRO_VERSION() macros.
- Lets us register stack aliases (e.g. both a generic name ["default"] and version-specific name ["default_v1"]).