| 14893 | static bool rack_mod_inited = false; |
| 14894 | |
| 14895 | static int |
| 14896 | tcp_addrack(module_t mod, int32_t type, void *data) |
| 14897 | { |
| 14898 | int32_t err = 0; |
| 14899 | int num_stacks; |
| 14900 | |
| 14901 | switch (type) { |
| 14902 | case MOD_LOAD: |
| 14903 | rack_zone = uma_zcreate(__XSTRING(MODNAME) "_map", |
| 14904 | sizeof(struct rack_sendmap), |
| 14905 | rack_ctor, rack_dtor, NULL, NULL, UMA_ALIGN_PTR, 0); |
| 14906 | |
| 14907 | rack_pcb_zone = uma_zcreate(__XSTRING(MODNAME) "_pcb", |
| 14908 | sizeof(struct tcp_rack), |
| 14909 | rack_ctor, NULL, NULL, NULL, UMA_ALIGN_CACHE, 0); |
| 14910 | |
| 14911 | sysctl_ctx_init(&rack_sysctl_ctx); |
| 14912 | rack_sysctl_root = SYSCTL_ADD_NODE(&rack_sysctl_ctx, |
| 14913 | SYSCTL_STATIC_CHILDREN(_net_inet_tcp), |
| 14914 | OID_AUTO, |
| 14915 | #ifdef STACKALIAS |
| 14916 | __XSTRING(STACKALIAS), |
| 14917 | #else |
| 14918 | __XSTRING(STACKNAME), |
| 14919 | #endif |
| 14920 | CTLFLAG_RW | CTLFLAG_MPSAFE, 0, |
| 14921 | ""); |
| 14922 | if (rack_sysctl_root == NULL) { |
| 14923 | printf("Failed to add sysctl node\n"); |
| 14924 | err = EFAULT; |
| 14925 | goto free_uma; |
| 14926 | } |
| 14927 | rack_init_sysctls(); |
| 14928 | num_stacks = nitems(rack_stack_names); |
| 14929 | err = register_tcp_functions_as_names(&__tcp_rack, M_WAITOK, |
| 14930 | rack_stack_names, &num_stacks); |
| 14931 | if (err) { |
| 14932 | printf("Failed to register %s stack name for " |
| 14933 | "%s module\n", rack_stack_names[num_stacks], |
| 14934 | __XSTRING(MODNAME)); |
| 14935 | sysctl_ctx_free(&rack_sysctl_ctx); |
| 14936 | free_uma: |
| 14937 | uma_zdestroy(rack_zone); |
| 14938 | uma_zdestroy(rack_pcb_zone); |
| 14939 | rack_counter_destroy(); |
| 14940 | printf("Failed to register rack module -- err:%d\n", err); |
| 14941 | return (err); |
| 14942 | } |
| 14943 | tcp_lro_reg_mbufq(); |
| 14944 | rack_mod_inited = true; |
| 14945 | break; |
| 14946 | case MOD_QUIESCE: |
| 14947 | err = deregister_tcp_functions(&__tcp_rack, true, false); |
| 14948 | break; |
| 14949 | case MOD_UNLOAD: |
| 14950 | err = deregister_tcp_functions(&__tcp_rack, false, true); |
| 14951 | if (err == EBUSY) |
| 14952 | break; |
nothing calls this directly
no test coverage detected