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()
1354 if (seq->cwnd < seq->ssth) { in ng_l2tp_seq_recv_nr()
1355 seq->cwnd += nack; in ng_l2tp_seq_recv_nr()
1357 if (seq->cwnd > seq->ssth) { /* into cg.av. phase */ in ng_l2tp_seq_recv_nr()
1358 nack = seq->cwnd - seq->ssth; in ng_l2tp_seq_recv_nr()
1359 seq->cwnd = seq->ssth; in ng_l2tp_seq_recv_nr()
1364 if (seq->cwnd >= seq->ssth) { in ng_l2tp_seq_recv_nr()
1365 seq->acks += nack; in ng_l2tp_seq_recv_nr()
1366 while (seq->acks >= seq->cwnd) { in ng_l2tp_seq_recv_nr()
1367 seq->acks -= seq->cwnd; in ng_l2tp_seq_recv_nr()
1368 if (seq->cwnd < seq->wmax) in ng_l2tp_seq_recv_nr()
1369 seq->cwnd++; in ng_l2tp_seq_recv_nr()
1375 if (callout_active(&seq->rack_timer)) in ng_l2tp_seq_recv_nr()
1376 ng_uncallout(&seq->rack_timer, priv->node); in ng_l2tp_seq_recv_nr()
1379 if (seq->xwin[0] == NULL) { in ng_l2tp_seq_recv_nr()
1380 mtx_unlock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1385 ng_callout(&seq->rack_timer, priv->node, NULL, in ng_l2tp_seq_recv_nr()
1392 ns = seq->ns; in ng_l2tp_seq_recv_nr()
1394 while ((i = L2TP_SEQ_DIFF(seq->ns, seq->rack)) < seq->cwnd in ng_l2tp_seq_recv_nr()
1395 && seq->xwin[i] != NULL) { in ng_l2tp_seq_recv_nr()
1396 xwin[j++] = seq->xwin[i]; in ng_l2tp_seq_recv_nr()
1397 seq->ns++; in ng_l2tp_seq_recv_nr()
1400 mtx_unlock(&seq->mtx); in ng_l2tp_seq_recv_nr()
1425 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_xack_timeout() local
1428 if (callout_pending(&seq->xack_timer) || in ng_l2tp_seq_xack_timeout()
1429 (!callout_active(&seq->xack_timer))) in ng_l2tp_seq_xack_timeout()
1433 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_xack_timeout()
1436 ng_l2tp_xmit_ctrl(priv, NULL, seq->ns); in ng_l2tp_seq_xack_timeout()
1442 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_xack_timeout()
1453 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_seq_rack_timeout() local
1458 if (callout_pending(&seq->rack_timer) || in ng_l2tp_seq_rack_timeout()
1459 (!callout_active(&seq->rack_timer))) in ng_l2tp_seq_rack_timeout()
1463 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_rack_timeout()
1468 if (seq->rexmits++ >= priv->conf.rexmit_max) in ng_l2tp_seq_rack_timeout()
1472 delay = (seq->rexmits > 12) ? (1 << 12) : (1 << seq->rexmits); in ng_l2tp_seq_rack_timeout()
1475 ng_callout(&seq->rack_timer, node, NULL, in ng_l2tp_seq_rack_timeout()
1479 seq->ns = seq->rack; in ng_l2tp_seq_rack_timeout()
1480 seq->ssth = (seq->cwnd + 1) / 2; in ng_l2tp_seq_rack_timeout()
1481 seq->cwnd = 1; in ng_l2tp_seq_rack_timeout()
1482 seq->acks = 0; in ng_l2tp_seq_rack_timeout()
1485 if ((m = L2TP_COPY_MBUF(seq->xwin[0], M_NOWAIT)) == NULL) in ng_l2tp_seq_rack_timeout()
1488 ng_l2tp_xmit_ctrl(priv, m, seq->ns++); in ng_l2tp_seq_rack_timeout()
1494 L2TP_SEQ_CHECK(seq); in ng_l2tp_seq_rack_timeout()
1504 struct l2tp_seq *const seq = &priv->seq; in ng_l2tp_xmit_ctrl() local
1509 mtx_lock(&seq->mtx); in ng_l2tp_xmit_ctrl()
1513 if (callout_active(&seq->xack_timer)) in ng_l2tp_xmit_ctrl()
1514 ng_uncallout(&seq->xack_timer, priv->node); in ng_l2tp_xmit_ctrl()
1516 seq->xack = seq->nr; in ng_l2tp_xmit_ctrl()
1518 mtx_unlock(&seq->mtx); in ng_l2tp_xmit_ctrl()
1561 p[10] = seq->nr >> 8; in ng_l2tp_xmit_ctrl()
1562 p[11] = seq->nr & 0xff; in ng_l2tp_xmit_ctrl()
1578 ng_l2tp_seq_check(struct l2tp_seq *seq) in ng_l2tp_seq_check() argument
1585 mtx_lock(&seq->mtx); in ng_l2tp_seq_check()
1587 self_unack = L2TP_SEQ_DIFF(seq->nr, seq->xack); in ng_l2tp_seq_check()
1588 peer_unack = L2TP_SEQ_DIFF(seq->ns, seq->rack); in ng_l2tp_seq_check()
1589 CHECK(seq->wmax <= L2TP_MAX_XWIN); in ng_l2tp_seq_check()
1590 CHECK(seq->cwnd >= 1); in ng_l2tp_seq_check()
1591 CHECK(seq->cwnd <= seq->wmax); in ng_l2tp_seq_check()
1592 CHECK(seq->ssth >= 1); in ng_l2tp_seq_check()
1593 CHECK(seq->ssth <= seq->wmax); in ng_l2tp_seq_check()
1594 if (seq->cwnd < seq->ssth) in ng_l2tp_seq_check()
1595 CHECK(seq->acks == 0); in ng_l2tp_seq_check()
1597 CHECK(seq->acks <= seq->cwnd); in ng_l2tp_seq_check()
1600 CHECK(peer_unack <= seq->wmax); in ng_l2tp_seq_check()
1601 CHECK((self_unack == 0) ^ callout_active(&seq->xack_timer)); in ng_l2tp_seq_check()
1602 CHECK((peer_unack == 0) ^ callout_active(&seq->rack_timer)); in ng_l2tp_seq_check()
1604 CHECK(seq->xwin[i] != NULL); in ng_l2tp_seq_check()
1605 for ( ; i < seq->cwnd; i++) /* verify peer's recv window full */ in ng_l2tp_seq_check()
1606 CHECK(seq->xwin[i] == NULL); in ng_l2tp_seq_check()
1608 mtx_unlock(&seq->mtx); in ng_l2tp_seq_check()