+ bzero(&tcp_timer_list, sizeof(tcp_timer_list));
+ LIST_INIT(&tcp_timer_list.lhead);
+ /*
+ * allocate lock group attribute, group and attribute for the tcp timer list
+ */
+ tcp_timer_list.mtx_grp_attr = lck_grp_attr_alloc_init();
+ tcp_timer_list.mtx_grp = lck_grp_alloc_init("tcptimerlist", tcp_timer_list.mtx_grp_attr);
+ tcp_timer_list.mtx_attr = lck_attr_alloc_init();
+ if ((tcp_timer_list.mtx = lck_mtx_alloc_init(tcp_timer_list.mtx_grp, tcp_timer_list.mtx_attr)) == NULL) {
+ panic("failed to allocate memory for tcp_timer_list.mtx\n");
+ };
+ tcp_timer_list.fast_quantum = TCP_FASTTIMER_QUANTUM;
+ tcp_timer_list.slow_quantum = TCP_SLOWTIMER_QUANTUM;
+ if ((tcp_timer_list.call = thread_call_allocate(tcp_run_timerlist, NULL)) == NULL) {
+ panic("failed to allocate call entry 1 in tcp_init\n");
+ }
+
+ /*
+ * allocate lock group attribute, group and attribute for tcp_uptime_lock
+ */
+ tcp_uptime_mtx_grp_attr = lck_grp_attr_alloc_init();
+ tcp_uptime_mtx_grp = lck_grp_alloc_init("tcpuptime", tcp_uptime_mtx_grp_attr);
+ tcp_uptime_mtx_attr = lck_attr_alloc_init();
+ tcp_uptime_lock = lck_spin_alloc_init(tcp_uptime_mtx_grp, tcp_uptime_mtx_attr);
+
+ /* Initialize TCP congestion control algorithms list */
+ tcp_cc_init();