Lines Matching refs:seq

156 	struct l2tp_seq		seq;		/* ctrl sequence number state */  member
192 static void ng_l2tp_seq_check(struct l2tp_seq *seq);
340 #define L2TP_SEQ_CHECK(seq) ng_l2tp_seq_check(seq) argument
651 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_shutdown() local
654 L2TP_SEQ_CHECK(seq); in ng_l2tp_shutdown()
660 ng_uncallout(&seq->rack_timer, node); in ng_l2tp_shutdown()
661 ng_uncallout(&seq->xack_timer, node); in ng_l2tp_shutdown()
663 mtx_destroy(&seq->mtx); in ng_l2tp_shutdown()
761 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata_lower()
900 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_rcvdata_lower() local
913 mtx_lock(&seq->mtx); in ng_l2tp_rcvdata_lower()
918 if (ns != seq->nr || seq->inproc) { in ng_l2tp_rcvdata_lower()
919 if (L2TP_SEQ_DIFF(ns, seq->nr) <= 0) in ng_l2tp_rcvdata_lower()
923 mtx_unlock(&seq->mtx); in ng_l2tp_rcvdata_lower()
924 ng_l2tp_xmit_ctrl(priv, NULL, seq->ns); in ng_l2tp_rcvdata_lower()
933 seq->inproc = 1; in ng_l2tp_rcvdata_lower()
934 mtx_unlock(&seq->mtx); in ng_l2tp_rcvdata_lower()
939 seq->inproc = 0; in ng_l2tp_rcvdata_lower()
950 mtx_lock(&seq->mtx); in ng_l2tp_rcvdata_lower()
952 seq->inproc = 0; in ng_l2tp_rcvdata_lower()
957 seq->nr++; in ng_l2tp_rcvdata_lower()
959 if (!callout_active(&seq->xack_timer)) { in ng_l2tp_rcvdata_lower()
960 ng_callout(&seq->xack_timer, priv->node, NULL, in ng_l2tp_rcvdata_lower()
965 mtx_unlock(&seq->mtx); in ng_l2tp_rcvdata_lower()
1001 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata_lower()
1013 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_rcvdata_ctrl() local
1020 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata_ctrl()
1046 mtx_lock(&seq->mtx); in ng_l2tp_rcvdata_ctrl()
1049 for (i = 0; i < L2TP_MAX_XWIN && seq->xwin[i] != NULL; i++); in ng_l2tp_rcvdata_ctrl()
1051 mtx_unlock(&seq->mtx); in ng_l2tp_rcvdata_ctrl()
1056 seq->xwin[i] = m; in ng_l2tp_rcvdata_ctrl()
1059 if (i >= seq->cwnd) { in ng_l2tp_rcvdata_ctrl()
1060 mtx_unlock(&seq->mtx); in ng_l2tp_rcvdata_ctrl()
1065 if (!callout_active(&seq->rack_timer)) in ng_l2tp_rcvdata_ctrl()
1066 ng_callout(&seq->rack_timer, node, NULL, in ng_l2tp_rcvdata_ctrl()
1069 ns = seq->ns++; in ng_l2tp_rcvdata_ctrl()
1071 mtx_unlock(&seq->mtx); in ng_l2tp_rcvdata_ctrl()
1083 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata_ctrl()
1102 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata()
1165 L2TP_SEQ_CHECK(&priv->seq); in ng_l2tp_rcvdata()
1194 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_init() local
1198 memset(seq, 0, sizeof(*seq)); in ng_l2tp_seq_init()
1199 seq->cwnd = 1; in ng_l2tp_seq_init()
1200 seq->wmax = priv->conf.peer_win; in ng_l2tp_seq_init()
1201 if (seq->wmax > L2TP_MAX_XWIN) in ng_l2tp_seq_init()
1202 seq->wmax = L2TP_MAX_XWIN; in ng_l2tp_seq_init()
1203 seq->ssth = seq->wmax; in ng_l2tp_seq_init()
1204 ng_callout_init(&seq->rack_timer); in ng_l2tp_seq_init()
1205 ng_callout_init(&seq->xack_timer); in ng_l2tp_seq_init()
1206 mtx_init(&seq->mtx, "ng_l2tp", NULL, MTX_DEF); in ng_l2tp_seq_init()
1207 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_init()
1216 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_set() local
1227 seq->ns = conf->ns; in ng_l2tp_seq_set()
1228 seq->nr = conf->nr; in ng_l2tp_seq_set()
1229 seq->rack = conf->rack; in ng_l2tp_seq_set()
1230 seq->xack = conf->xack; in ng_l2tp_seq_set()
1241 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_adjust() local
1256 if (new_wmax < seq->wmax) in ng_l2tp_seq_adjust()
1258 seq->wmax = new_wmax; in ng_l2tp_seq_adjust()
1270 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_reset() local
1275 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_reset()
1278 ng_uncallout(&seq->rack_timer, priv->node); in ng_l2tp_seq_reset()
1279 ng_uncallout(&seq->xack_timer, priv->node); in ng_l2tp_seq_reset()
1283 if (seq->xwin[i] == NULL) in ng_l2tp_seq_reset()
1285 m_freem(seq->xwin[i]); in ng_l2tp_seq_reset()
1292 seq->ns = 0; in ng_l2tp_seq_reset()
1293 seq->nr = 0; in ng_l2tp_seq_reset()
1294 seq->rack = 0; in ng_l2tp_seq_reset()
1295 seq->xack = 0; in ng_l2tp_seq_reset()
1296 seq->wmax = L2TP_MAX_XWIN; in ng_l2tp_seq_reset()
1297 seq->cwnd = 1; in ng_l2tp_seq_reset()
1298 seq->ssth = seq->wmax; in ng_l2tp_seq_reset()
1299 seq->acks = 0; in ng_l2tp_seq_reset()
1300 seq->rexmits = 0; in ng_l2tp_seq_reset()
1301 bzero(seq->xwin, sizeof(seq->xwin)); in ng_l2tp_seq_reset()
1304 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_reset()
1313 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_recv_nr() local
1319 mtx_lock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1322 if ((nack = L2TP_SEQ_DIFF(nr, seq->rack)) <= 0) { in ng_l2tp_seq_recv_nr()
1323 mtx_unlock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1326 if (L2TP_SEQ_DIFF(nr, seq->ns) > 0) { in ng_l2tp_seq_recv_nr()
1327 mtx_unlock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1335 seq->rack = nr; in ng_l2tp_seq_recv_nr()
1336 seq->rexmits = 0; in ng_l2tp_seq_recv_nr()
1340 m_freem(seq->xwin[i]); in ng_l2tp_seq_recv_nr()
1341 memmove(seq->xwin, seq->xwin + nack, in ng_l2tp_seq_recv_nr()
1342 (L2TP_MAX_XWIN - nack) * sizeof(*seq->xwin)); in ng_l2tp_seq_recv_nr()
1343 memset(seq->xwin + (L2TP_MAX_XWIN - nack), 0, in ng_l2tp_seq_recv_nr()
1344 nack * sizeof(*seq->xwin)); in ng_l2tp_seq_recv_nr()
1351 if (seq->cwnd < seq->wmax) { in ng_l2tp_seq_recv_nr()
1353 if (seq->cwnd < seq->ssth) { in ng_l2tp_seq_recv_nr()
1354 seq->cwnd += nack; in ng_l2tp_seq_recv_nr()
1356 if (seq->cwnd > seq->ssth) { /* into cg.av. phase */ in ng_l2tp_seq_recv_nr()
1357 nack = seq->cwnd - seq->ssth; in ng_l2tp_seq_recv_nr()
1358 seq->cwnd = seq->ssth; in ng_l2tp_seq_recv_nr()
1363 if (seq->cwnd >= seq->ssth) { in ng_l2tp_seq_recv_nr()
1364 seq->acks += nack; in ng_l2tp_seq_recv_nr()
1365 while (seq->acks >= seq->cwnd) { in ng_l2tp_seq_recv_nr()
1366 seq->acks -= seq->cwnd; in ng_l2tp_seq_recv_nr()
1367 if (seq->cwnd < seq->wmax) in ng_l2tp_seq_recv_nr()
1368 seq->cwnd++; in ng_l2tp_seq_recv_nr()
1374 if (callout_active(&seq->rack_timer)) in ng_l2tp_seq_recv_nr()
1375 ng_uncallout(&seq->rack_timer, priv->node); in ng_l2tp_seq_recv_nr()
1378 if (seq->xwin[0] == NULL) { in ng_l2tp_seq_recv_nr()
1379 mtx_unlock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1384 ng_callout(&seq->rack_timer, priv->node, NULL, in ng_l2tp_seq_recv_nr()
1391 ns = seq->ns; in ng_l2tp_seq_recv_nr()
1393 while ((i = L2TP_SEQ_DIFF(seq->ns, seq->rack)) < seq->cwnd in ng_l2tp_seq_recv_nr()
1394 && seq->xwin[i] != NULL) { in ng_l2tp_seq_recv_nr()
1395 xwin[j++] = seq->xwin[i]; in ng_l2tp_seq_recv_nr()
1396 seq->ns++; in ng_l2tp_seq_recv_nr()
1399 mtx_unlock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1424 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_xack_timeout() local
1427 if (callout_pending(&seq->xack_timer) || in ng_l2tp_seq_xack_timeout()
1428 (!callout_active(&seq->xack_timer))) in ng_l2tp_seq_xack_timeout()
1432 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_xack_timeout()
1435 ng_l2tp_xmit_ctrl(priv, NULL, seq->ns); in ng_l2tp_seq_xack_timeout()
1441 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_xack_timeout()
1452 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_rack_timeout() local
1457 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_rack_timeout()
1459 mtx_lock(&seq->mtx); in ng_l2tp_seq_rack_timeout()
1461 if (callout_pending(&seq->rack_timer) || in ng_l2tp_seq_rack_timeout()
1462 !callout_active(&seq->rack_timer)) { in ng_l2tp_seq_rack_timeout()
1463 mtx_unlock(&seq->mtx); in ng_l2tp_seq_rack_timeout()
1470 if (seq->rexmits++ >= priv->conf.rexmit_max) in ng_l2tp_seq_rack_timeout()
1474 delay = (seq->rexmits > 12) ? (1 << 12) : (1 << seq->rexmits); in ng_l2tp_seq_rack_timeout()
1477 ng_callout(&seq->rack_timer, node, NULL, in ng_l2tp_seq_rack_timeout()
1481 seq->ns = seq->rack; in ng_l2tp_seq_rack_timeout()
1482 seq->ssth = (seq->cwnd + 1) / 2; in ng_l2tp_seq_rack_timeout()
1483 seq->cwnd = 1; in ng_l2tp_seq_rack_timeout()
1484 seq->acks = 0; in ng_l2tp_seq_rack_timeout()
1487 m = L2TP_COPY_MBUF(seq->xwin[0], M_NOWAIT); in ng_l2tp_seq_rack_timeout()
1488 mtx_unlock(&seq->mtx); in ng_l2tp_seq_rack_timeout()
1492 ng_l2tp_xmit_ctrl(priv, m, seq->ns++); in ng_l2tp_seq_rack_timeout()
1498 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_rack_timeout()
1508 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_xmit_ctrl() local
1513 mtx_lock(&seq->mtx); in ng_l2tp_xmit_ctrl()
1517 if (callout_active(&seq->xack_timer)) in ng_l2tp_xmit_ctrl()
1518 ng_uncallout(&seq->xack_timer, priv->node); in ng_l2tp_xmit_ctrl()
1520 seq->xack = seq->nr; in ng_l2tp_xmit_ctrl()
1522 mtx_unlock(&seq->mtx); in ng_l2tp_xmit_ctrl()
1573 p[10] = seq->nr >> 8; in ng_l2tp_xmit_ctrl()
1574 p[11] = seq->nr & 0xff; in ng_l2tp_xmit_ctrl()
1590 ng_l2tp_seq_check(struct l2tp_seq *seq) in ng_l2tp_seq_check() argument
1597 mtx_lock(&seq->mtx); in ng_l2tp_seq_check()
1599 self_unack = L2TP_SEQ_DIFF(seq->nr, seq->xack); in ng_l2tp_seq_check()
1600 peer_unack = L2TP_SEQ_DIFF(seq->ns, seq->rack); in ng_l2tp_seq_check()
1601 CHECK(seq->wmax <= L2TP_MAX_XWIN); in ng_l2tp_seq_check()
1602 CHECK(seq->cwnd >= 1); in ng_l2tp_seq_check()
1603 CHECK(seq->cwnd <= seq->wmax); in ng_l2tp_seq_check()
1604 CHECK(seq->ssth >= 1); in ng_l2tp_seq_check()
1605 CHECK(seq->ssth <= seq->wmax); in ng_l2tp_seq_check()
1606 if (seq->cwnd < seq->ssth) in ng_l2tp_seq_check()
1607 CHECK(seq->acks == 0); in ng_l2tp_seq_check()
1609 CHECK(seq->acks <= seq->cwnd); in ng_l2tp_seq_check()
1612 CHECK(peer_unack <= seq->wmax); in ng_l2tp_seq_check()
1613 CHECK((self_unack == 0) ^ callout_active(&seq->xack_timer)); in ng_l2tp_seq_check()
1614 CHECK((peer_unack == 0) ^ callout_active(&seq->rack_timer)); in ng_l2tp_seq_check()
1616 CHECK(seq->xwin[i] != NULL); in ng_l2tp_seq_check()
1617 for ( ; i < seq->cwnd; i++) /* verify peer's recv window full */ in ng_l2tp_seq_check()
1618 CHECK(seq->xwin[i] == NULL); in ng_l2tp_seq_check()
1620 mtx_unlock(&seq->mtx); in ng_l2tp_seq_check()