Deleted Added
full compact
ng_l2tp.c (227293) ng_l2tp.c (243882)
1/*-
2 * Copyright (c) 2001-2002 Packet Design, LLC.
3 * All rights reserved.
4 *
5 * Subject to the following obligations and disclaimer of warranty,
6 * use and redistribution of this software, in source or object code
7 * forms, with or without modifications are expressly permitted by
8 * Packet Design; provided, however, that:

--- 22 unchanged lines hidden (view full) ---

31 * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
32 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
34 * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
35 * THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Author: Archie Cobbs <archie@freebsd.org>
38 *
1/*-
2 * Copyright (c) 2001-2002 Packet Design, LLC.
3 * All rights reserved.
4 *
5 * Subject to the following obligations and disclaimer of warranty,
6 * use and redistribution of this software, in source or object code
7 * forms, with or without modifications are expressly permitted by
8 * Packet Design; provided, however, that:

--- 22 unchanged lines hidden (view full) ---

31 * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
32 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
34 * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
35 * THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Author: Archie Cobbs <archie@freebsd.org>
38 *
39 * $FreeBSD: head/sys/netgraph/ng_l2tp.c 227293 2011-11-07 06:44:47Z ed $
39 * $FreeBSD: head/sys/netgraph/ng_l2tp.c 243882 2012-12-05 08:04:20Z glebius $
40 */
41
42/*
43 * L2TP netgraph node type.
44 *
45 * This node type implements the lower layer of the
46 * L2TP protocol as specified in RFC 2661.
47 */

--- 881 unchanged lines hidden (view full) ---

929 /*
930 * Until we deliver this packet we can't receive next one as
931 * we have no information for sending ack.
932 */
933 seq->inproc = 1;
934 mtx_unlock(&seq->mtx);
935
936 /* Prepend session ID to packet. */
40 */
41
42/*
43 * L2TP netgraph node type.
44 *
45 * This node type implements the lower layer of the
46 * L2TP protocol as specified in RFC 2661.
47 */

--- 881 unchanged lines hidden (view full) ---

929 /*
930 * Until we deliver this packet we can't receive next one as
931 * we have no information for sending ack.
932 */
933 seq->inproc = 1;
934 mtx_unlock(&seq->mtx);
935
936 /* Prepend session ID to packet. */
937 M_PREPEND(m, 2, M_DONTWAIT);
937 M_PREPEND(m, 2, M_NOWAIT);
938 if (m == NULL) {
939 seq->inproc = 0;
940 priv->stats.memoryFailures++;
941 NG_FREE_ITEM(item);
942 ERROUT(ENOBUFS);
943 }
944 mtod(m, u_int8_t *)[0] = sid >> 8;
945 mtod(m, u_int8_t *)[1] = sid & 0xff;

--- 120 unchanged lines hidden (view full) ---

1066 ng_callout(&seq->rack_timer, node, NULL,
1067 hz, ng_l2tp_seq_rack_timeout, NULL, 0);
1068
1069 ns = seq->ns++;
1070
1071 mtx_unlock(&seq->mtx);
1072
1073 /* Copy packet */
938 if (m == NULL) {
939 seq->inproc = 0;
940 priv->stats.memoryFailures++;
941 NG_FREE_ITEM(item);
942 ERROUT(ENOBUFS);
943 }
944 mtod(m, u_int8_t *)[0] = sid >> 8;
945 mtod(m, u_int8_t *)[1] = sid & 0xff;

--- 120 unchanged lines hidden (view full) ---

1066 ng_callout(&seq->rack_timer, node, NULL,
1067 hz, ng_l2tp_seq_rack_timeout, NULL, 0);
1068
1069 ns = seq->ns++;
1070
1071 mtx_unlock(&seq->mtx);
1072
1073 /* Copy packet */
1074 if ((m = L2TP_COPY_MBUF(m, M_DONTWAIT)) == NULL) {
1074 if ((m = L2TP_COPY_MBUF(m, M_NOWAIT)) == NULL) {
1075 priv->stats.memoryFailures++;
1076 ERROUT(ENOBUFS);
1077 }
1078
1079 /* Send packet and increment xmit sequence number */
1080 error = ng_l2tp_xmit_ctrl(priv, m, ns);
1081done:
1082 /* Done */

--- 34 unchanged lines hidden (view full) ---

1117 NG_FREE_M(m);
1118 ERROUT(EOVERFLOW);
1119 }
1120
1121 /* Prepend L2TP header */
1122 M_PREPEND(m, 6
1123 + (2 * (hpriv->conf.include_length != 0))
1124 + (4 * (hpriv->conf.enable_dseq != 0)),
1075 priv->stats.memoryFailures++;
1076 ERROUT(ENOBUFS);
1077 }
1078
1079 /* Send packet and increment xmit sequence number */
1080 error = ng_l2tp_xmit_ctrl(priv, m, ns);
1081done:
1082 /* Done */

--- 34 unchanged lines hidden (view full) ---

1117 NG_FREE_M(m);
1118 ERROUT(EOVERFLOW);
1119 }
1120
1121 /* Prepend L2TP header */
1122 M_PREPEND(m, 6
1123 + (2 * (hpriv->conf.include_length != 0))
1124 + (4 * (hpriv->conf.enable_dseq != 0)),
1125 M_DONTWAIT);
1125 M_NOWAIT);
1126 if (m == NULL) {
1127 priv->stats.memoryFailures++;
1128 NG_FREE_ITEM(item);
1129 ERROUT(ENOBUFS);
1130 }
1131 p = mtod(m, uint8_t *);
1132 hdr = L2TP_DATA_HDR;
1133 if (hpriv->conf.include_length) {

--- 267 unchanged lines hidden (view full) ---

1401
1402 /*
1403 * Send prepared.
1404 * If there is a memory error, pretend packet was sent, as it
1405 * will get retransmitted later anyway.
1406 */
1407 for (i = 0; i < j; i++) {
1408 struct mbuf *m;
1126 if (m == NULL) {
1127 priv->stats.memoryFailures++;
1128 NG_FREE_ITEM(item);
1129 ERROUT(ENOBUFS);
1130 }
1131 p = mtod(m, uint8_t *);
1132 hdr = L2TP_DATA_HDR;
1133 if (hpriv->conf.include_length) {

--- 267 unchanged lines hidden (view full) ---

1401
1402 /*
1403 * Send prepared.
1404 * If there is a memory error, pretend packet was sent, as it
1405 * will get retransmitted later anyway.
1406 */
1407 for (i = 0; i < j; i++) {
1408 struct mbuf *m;
1409 if ((m = L2TP_COPY_MBUF(xwin[i], M_DONTWAIT)) == NULL)
1409 if ((m = L2TP_COPY_MBUF(xwin[i], M_NOWAIT)) == NULL)
1410 priv->stats.memoryFailures++;
1411 else
1412 ng_l2tp_xmit_ctrl(priv, m, ns);
1413 ns++;
1414 }
1415}
1416
1417/*

--- 59 unchanged lines hidden (view full) ---

1477
1478 /* Do slow-start/congestion algorithm windowing algorithm */
1479 seq->ns = seq->rack;
1480 seq->ssth = (seq->cwnd + 1) / 2;
1481 seq->cwnd = 1;
1482 seq->acks = 0;
1483
1484 /* Retransmit oldest unack'd packet */
1410 priv->stats.memoryFailures++;
1411 else
1412 ng_l2tp_xmit_ctrl(priv, m, ns);
1413 ns++;
1414 }
1415}
1416
1417/*

--- 59 unchanged lines hidden (view full) ---

1477
1478 /* Do slow-start/congestion algorithm windowing algorithm */
1479 seq->ns = seq->rack;
1480 seq->ssth = (seq->cwnd + 1) / 2;
1481 seq->cwnd = 1;
1482 seq->acks = 0;
1483
1484 /* Retransmit oldest unack'd packet */
1485 if ((m = L2TP_COPY_MBUF(seq->xwin[0], M_DONTWAIT)) == NULL)
1485 if ((m = L2TP_COPY_MBUF(seq->xwin[0], M_NOWAIT)) == NULL)
1486 priv->stats.memoryFailures++;
1487 else
1488 ng_l2tp_xmit_ctrl(priv, m, seq->ns++);
1489
1490 /* callout_deactivate() is not needed here
1491 as ng_callout() is getting called each time */
1492
1493 /* Sanity check */

--- 22 unchanged lines hidden (view full) ---

1516 seq->xack = seq->nr;
1517
1518 mtx_unlock(&seq->mtx);
1519
1520 /* If no mbuf passed, send an empty packet (ZLB) */
1521 if (m == NULL) {
1522
1523 /* Create a new mbuf for ZLB packet */
1486 priv->stats.memoryFailures++;
1487 else
1488 ng_l2tp_xmit_ctrl(priv, m, seq->ns++);
1489
1490 /* callout_deactivate() is not needed here
1491 as ng_callout() is getting called each time */
1492
1493 /* Sanity check */

--- 22 unchanged lines hidden (view full) ---

1516 seq->xack = seq->nr;
1517
1518 mtx_unlock(&seq->mtx);
1519
1520 /* If no mbuf passed, send an empty packet (ZLB) */
1521 if (m == NULL) {
1522
1523 /* Create a new mbuf for ZLB packet */
1524 MGETHDR(m, M_DONTWAIT, MT_DATA);
1524 MGETHDR(m, M_NOWAIT, MT_DATA);
1525 if (m == NULL) {
1526 priv->stats.memoryFailures++;
1527 return (ENOBUFS);
1528 }
1529 m->m_len = m->m_pkthdr.len = 12;
1530 m->m_pkthdr.rcvif = NULL;
1531 priv->stats.xmitZLBs++;
1532 } else {
1533
1534 /* Strip off session ID */
1535 if (m->m_len < 2 && (m = m_pullup(m, 2)) == NULL) {
1536 priv->stats.memoryFailures++;
1537 return (ENOBUFS);
1538 }
1539 session_id = (mtod(m, u_int8_t *)[0] << 8) + mtod(m, u_int8_t *)[1];
1540
1541 /* Make room for L2TP header */
1525 if (m == NULL) {
1526 priv->stats.memoryFailures++;
1527 return (ENOBUFS);
1528 }
1529 m->m_len = m->m_pkthdr.len = 12;
1530 m->m_pkthdr.rcvif = NULL;
1531 priv->stats.xmitZLBs++;
1532 } else {
1533
1534 /* Strip off session ID */
1535 if (m->m_len < 2 && (m = m_pullup(m, 2)) == NULL) {
1536 priv->stats.memoryFailures++;
1537 return (ENOBUFS);
1538 }
1539 session_id = (mtod(m, u_int8_t *)[0] << 8) + mtod(m, u_int8_t *)[1];
1540
1541 /* Make room for L2TP header */
1542 M_PREPEND(m, 10, M_DONTWAIT); /* - 2 + 12 = 10 */
1542 M_PREPEND(m, 10, M_NOWAIT); /* - 2 + 12 = 10 */
1543 if (m == NULL) {
1544 priv->stats.memoryFailures++;
1545 return (ENOBUFS);
1546 }
1547 }
1548
1549 /* Fill in L2TP header */
1550 p = mtod(m, u_int8_t *);

--- 62 unchanged lines hidden ---
1543 if (m == NULL) {
1544 priv->stats.memoryFailures++;
1545 return (ENOBUFS);
1546 }
1547 }
1548
1549 /* Fill in L2TP header */
1550 p = mtod(m, u_int8_t *);

--- 62 unchanged lines hidden ---