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 --- |