Lines Matching refs:seq

146 	struct l2tp_seq		seq;		/* ctrl sequence number state */  member
186 static void ng_l2tp_seq_check(struct l2tp_seq *seq);
294 #define L2TP_SEQ_CHECK(seq) ng_l2tp_seq_check(seq) argument
587 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata()
612 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata()
623 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_shutdown() local
626 L2TP_SEQ_CHECK(seq); in ng_l2tp_shutdown()
635 if (!seq->rack_timer_running && !seq->xack_timer_running) { in ng_l2tp_shutdown()
893 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_recv_ctrl() local
914 for (i = 0; i < L2TP_MAX_XWIN && seq->xwin[i] != NULL; i++); in ng_l2tp_recv_ctrl()
920 seq->xwin[i] = m; in ng_l2tp_recv_ctrl()
923 KASSERT((i == 0) ^ seq->rack_timer_running, in ng_l2tp_recv_ctrl()
925 __func__, i, seq->rack_timer_running ? "" : "not ")); in ng_l2tp_recv_ctrl()
928 if (i >= seq->cwnd) in ng_l2tp_recv_ctrl()
932 if (!seq->rack_timer_running) { in ng_l2tp_recv_ctrl()
933 callout_reset(&seq->rack_timer, in ng_l2tp_recv_ctrl()
935 seq->rack_timer_running = 1; in ng_l2tp_recv_ctrl()
940 if ((m = L2TP_COPY_MBUF(seq->xwin[i], M_NOWAIT)) == NULL) { in ng_l2tp_recv_ctrl()
946 return (ng_l2tp_xmit_ctrl(priv, m, seq->ns++)); in ng_l2tp_recv_ctrl()
1022 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_init() local
1026 memset(seq, 0, sizeof(*seq)); in ng_l2tp_seq_init()
1027 seq->cwnd = 1; in ng_l2tp_seq_init()
1028 seq->wmax = priv->conf.peer_win; in ng_l2tp_seq_init()
1029 if (seq->wmax > L2TP_MAX_XWIN) in ng_l2tp_seq_init()
1030 seq->wmax = L2TP_MAX_XWIN; in ng_l2tp_seq_init()
1031 seq->ssth = seq->wmax; in ng_l2tp_seq_init()
1032 seq->max_rexmits = priv->conf.rexmit_max; in ng_l2tp_seq_init()
1033 seq->max_rexmit_to = priv->conf.rexmit_max_to; in ng_l2tp_seq_init()
1034 callout_init(&seq->rack_timer); in ng_l2tp_seq_init()
1035 callout_init(&seq->xack_timer); in ng_l2tp_seq_init()
1036 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_init()
1045 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_adjust() local
1060 if (new_wmax < seq->wmax) in ng_l2tp_seq_adjust()
1062 seq->wmax = new_wmax; in ng_l2tp_seq_adjust()
1065 seq->max_rexmits = conf->rexmit_max; in ng_l2tp_seq_adjust()
1066 seq->max_rexmit_to = conf->rexmit_max_to; in ng_l2tp_seq_adjust()
1078 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_reset() local
1084 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_reset()
1087 if (seq->rack_timer_running && callout_stop(&seq->rack_timer) == 1) { in ng_l2tp_seq_reset()
1088 seq->rack_timer_running = 0; in ng_l2tp_seq_reset()
1091 if (seq->xack_timer_running && callout_stop(&seq->xack_timer) == 1) { in ng_l2tp_seq_reset()
1092 seq->xack_timer_running = 0; in ng_l2tp_seq_reset()
1098 if (seq->xwin[i] == NULL) in ng_l2tp_seq_reset()
1100 m_freem(seq->xwin[i]); in ng_l2tp_seq_reset()
1114 memset(seq, 0, sizeof(*seq)); in ng_l2tp_seq_reset()
1115 seq->cwnd = 1; in ng_l2tp_seq_reset()
1116 seq->wmax = L2TP_MAX_XWIN; in ng_l2tp_seq_reset()
1117 seq->ssth = seq->wmax; in ng_l2tp_seq_reset()
1120 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_reset()
1129 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_recv_nr() local
1135 if ((nack = L2TP_SEQ_DIFF(nr, seq->rack)) <= 0) in ng_l2tp_seq_recv_nr()
1137 if (L2TP_SEQ_DIFF(nr, seq->ns) > 0) { in ng_l2tp_seq_recv_nr()
1145 seq->rack = nr; in ng_l2tp_seq_recv_nr()
1146 seq->rexmits = 0; in ng_l2tp_seq_recv_nr()
1150 m_freem(seq->xwin[i]); in ng_l2tp_seq_recv_nr()
1151 memmove(seq->xwin, seq->xwin + nack, in ng_l2tp_seq_recv_nr()
1152 (L2TP_MAX_XWIN - nack) * sizeof(*seq->xwin)); in ng_l2tp_seq_recv_nr()
1153 memset(seq->xwin + (L2TP_MAX_XWIN - nack), 0, in ng_l2tp_seq_recv_nr()
1154 nack * sizeof(*seq->xwin)); in ng_l2tp_seq_recv_nr()
1161 if (seq->cwnd < seq->wmax) { in ng_l2tp_seq_recv_nr()
1164 if (seq->cwnd < seq->ssth) { in ng_l2tp_seq_recv_nr()
1165 seq->cwnd += nack; in ng_l2tp_seq_recv_nr()
1167 if (seq->cwnd > seq->ssth) { /* into cg.av. phase */ in ng_l2tp_seq_recv_nr()
1168 nack = seq->cwnd - seq->ssth; in ng_l2tp_seq_recv_nr()
1169 seq->cwnd = seq->ssth; in ng_l2tp_seq_recv_nr()
1174 if (seq->cwnd >= seq->ssth) { in ng_l2tp_seq_recv_nr()
1175 seq->acks += nack; in ng_l2tp_seq_recv_nr()
1176 while (seq->acks >= seq->cwnd) { in ng_l2tp_seq_recv_nr()
1177 seq->acks -= seq->cwnd; in ng_l2tp_seq_recv_nr()
1178 if (seq->cwnd < seq->wmax) in ng_l2tp_seq_recv_nr()
1179 seq->cwnd++; in ng_l2tp_seq_recv_nr()
1185 if (seq->rack_timer_running && callout_stop(&seq->rack_timer) == 1) { in ng_l2tp_seq_recv_nr()
1186 seq->rack_timer_running = 0; in ng_l2tp_seq_recv_nr()
1191 if (seq->xwin[0] == NULL) in ng_l2tp_seq_recv_nr()
1195 callout_reset(&seq->rack_timer, in ng_l2tp_seq_recv_nr()
1197 seq->rack_timer_running = 1; in ng_l2tp_seq_recv_nr()
1205 while ((i = L2TP_SEQ_DIFF(seq->ns, seq->rack)) < seq->cwnd in ng_l2tp_seq_recv_nr()
1206 && seq->xwin[i] != NULL) { in ng_l2tp_seq_recv_nr()
1207 if ((m = L2TP_COPY_MBUF(seq->xwin[i], M_NOWAIT)) == NULL) in ng_l2tp_seq_recv_nr()
1210 ng_l2tp_xmit_ctrl(priv, m, seq->ns); in ng_l2tp_seq_recv_nr()
1211 seq->ns++; in ng_l2tp_seq_recv_nr()
1228 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_recv_ns() local
1231 if (ns != seq->nr) { in ng_l2tp_seq_recv_ns()
1232 if (L2TP_SEQ_DIFF(ns, seq->nr) < 0) in ng_l2tp_seq_recv_ns()
1236 ng_l2tp_xmit_ctrl(priv, NULL, seq->ns); in ng_l2tp_seq_recv_ns()
1241 seq->nr++; in ng_l2tp_seq_recv_ns()
1244 if (!seq->xack_timer_running) { in ng_l2tp_seq_recv_ns()
1245 callout_reset(&seq->xack_timer, in ng_l2tp_seq_recv_ns()
1247 seq->xack_timer_running = 1; in ng_l2tp_seq_recv_ns()
1264 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_xack_timeout() local
1269 seq->xack_timer_running = 0; in ng_l2tp_seq_xack_timeout()
1270 if (!seq->rack_timer_running) { in ng_l2tp_seq_xack_timeout()
1282 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_xack_timeout()
1285 if (seq->xack != seq->nr) in ng_l2tp_seq_xack_timeout()
1286 ng_l2tp_xmit_ctrl(priv, NULL, seq->ns); in ng_l2tp_seq_xack_timeout()
1289 seq->xack_timer_running = 0; in ng_l2tp_seq_xack_timeout()
1291 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_xack_timeout()
1304 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_rack_timeout() local
1311 seq->rack_timer_running = 0; in ng_l2tp_seq_rack_timeout()
1312 if (!seq->xack_timer_running) { in ng_l2tp_seq_rack_timeout()
1324 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_rack_timeout()
1327 if (seq->rack == seq->ns) { in ng_l2tp_seq_rack_timeout()
1328 seq->rack_timer_running = 0; in ng_l2tp_seq_rack_timeout()
1335 if (seq->rexmits++ >= seq->max_rexmits) in ng_l2tp_seq_rack_timeout()
1339 delay = (seq->rexmits > 12) ? (1 << 12) : (1 << seq->rexmits); in ng_l2tp_seq_rack_timeout()
1340 if (delay > seq->max_rexmit_to) in ng_l2tp_seq_rack_timeout()
1341 delay = seq->max_rexmit_to; in ng_l2tp_seq_rack_timeout()
1342 callout_reset(&seq->rack_timer, in ng_l2tp_seq_rack_timeout()
1346 seq->ssth = (seq->cwnd + 1) / 2; in ng_l2tp_seq_rack_timeout()
1347 seq->cwnd = 1; in ng_l2tp_seq_rack_timeout()
1348 seq->acks = 0; in ng_l2tp_seq_rack_timeout()
1351 if ((m = L2TP_COPY_MBUF(seq->xwin[0], M_NOWAIT)) == NULL) in ng_l2tp_seq_rack_timeout()
1354 ng_l2tp_xmit_ctrl(priv, m, seq->rack); in ng_l2tp_seq_rack_timeout()
1358 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_rack_timeout()
1369 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_xmit_ctrl() local
1410 mtod(m, u_int16_t *)[5] = htons(seq->nr); in ng_l2tp_xmit_ctrl()
1417 if (seq->xack_timer_running && callout_stop(&seq->xack_timer) == 1) { in ng_l2tp_xmit_ctrl()
1418 seq->xack_timer_running = 0; in ng_l2tp_xmit_ctrl()
1421 seq->xack = seq->nr; in ng_l2tp_xmit_ctrl()
1433 ng_l2tp_seq_check(struct l2tp_seq *seq) in ng_l2tp_seq_check() argument
1435 const int self_unack = L2TP_SEQ_DIFF(seq->nr, seq->xack); in ng_l2tp_seq_check()
1436 const int peer_unack = L2TP_SEQ_DIFF(seq->ns, seq->rack); in ng_l2tp_seq_check()
1441 CHECK(seq->wmax <= L2TP_MAX_XWIN); in ng_l2tp_seq_check()
1442 CHECK(seq->cwnd >= 1); in ng_l2tp_seq_check()
1443 CHECK(seq->cwnd <= seq->wmax); in ng_l2tp_seq_check()
1444 CHECK(seq->ssth >= 1); in ng_l2tp_seq_check()
1445 CHECK(seq->ssth <= seq->wmax); in ng_l2tp_seq_check()
1446 if (seq->cwnd < seq->ssth) in ng_l2tp_seq_check()
1447 CHECK(seq->acks == 0); in ng_l2tp_seq_check()
1449 CHECK(seq->acks <= seq->cwnd); in ng_l2tp_seq_check()
1452 CHECK(peer_unack <= seq->wmax); in ng_l2tp_seq_check()
1453 CHECK((self_unack == 0) ^ seq->xack_timer_running); in ng_l2tp_seq_check()
1454 CHECK((peer_unack == 0) ^ seq->rack_timer_running); in ng_l2tp_seq_check()
1455 CHECK(seq->rack_timer_running || !callout_pending(&seq->rack_timer)); in ng_l2tp_seq_check()
1456 CHECK(seq->xack_timer_running || !callout_pending(&seq->xack_timer)); in ng_l2tp_seq_check()
1458 CHECK(seq->xwin[i] != NULL); in ng_l2tp_seq_check()
1459 for ( ; i < seq->cwnd; i++) /* verify peer's recv window full */ in ng_l2tp_seq_check()
1460 CHECK(seq->xwin[i] == NULL); in ng_l2tp_seq_check()