1 2/* 3 * Copyright (c) 2001-2002 Packet Design, LLC. 4 * All rights reserved. 5 * 6 * Subject to the following obligations and disclaimer of warranty, 7 * use and redistribution of this software, in source or object code 8 * forms, with or without modifications are expressly permitted by --- 23 unchanged lines hidden (view full) --- 32 * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF 33 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 35 * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF 36 * THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * Author: Archie Cobbs <archie@freebsd.org> 39 * |
40 * $FreeBSD: head/sys/netgraph/ng_l2tp.c 108107 2002-12-19 22:58:27Z bmilekic $ |
41 */ 42 43/* 44 * L2TP netgraph node type. 45 * 46 * This node type implements the lower layer of the 47 * L2TP protocol as specified in RFC 2661. 48 */ 49 50#include <sys/param.h> 51#include <sys/systm.h> 52#include <sys/kernel.h> 53#include <sys/time.h> 54#include <sys/conf.h> 55#include <sys/mbuf.h> 56#include <sys/malloc.h> 57#include <sys/errno.h> |
58#include <sys/libkern.h> |
59 60#include <netgraph/ng_message.h> 61#include <netgraph/netgraph.h> 62#include <netgraph/ng_parse.h> 63#include <netgraph/ng_l2tp.h> 64 65#ifdef NG_SEPARATE_MALLOC 66MALLOC_DEFINE(M_NETGRAPH_L2TP, "netgraph_l2tp", "netgraph l2tp node"); --- 224 unchanged lines hidden (view full) --- 291 292/* Sequence number state sanity checking */ 293#ifdef INVARIANTS 294#define L2TP_SEQ_CHECK(seq) ng_l2tp_seq_check(seq) 295#else 296#define L2TP_SEQ_CHECK(x) do { } while (0) 297#endif 298 |
299/* memmove macro */ |
300#define memmove(d, s, l) ovbcopy(s, d, l) |
301 302/* Whether to use m_copypacket() or m_dup() */ 303#define L2TP_COPY_MBUF m_copypacket 304 305/************************************************************************ 306 NETGRAPH NODE STUFF 307************************************************************************/ 308 --- 641 unchanged lines hidden (view full) --- 950 if (!seq->rack_timer_running) { 951 callout_reset(&seq->rack_timer, 952 hz, ng_l2tp_seq_rack_timeout, node); 953 seq->rack_timer_running = 1; 954 NG_NODE_REF(node); 955 } 956 957 /* Copy packet */ |
958 if ((m = L2TP_COPY_MBUF(seq->xwin[i], M_DONTWAIT)) == NULL) { |
959 priv->stats.memoryFailures++; 960 return (ENOBUFS); 961 } 962 963 /* Send packet and increment xmit sequence number */ 964 return (ng_l2tp_xmit_ctrl(priv, m, seq->ns++)); 965} 966 --- 247 unchanged lines hidden (view full) --- 1214 1215 /* 1216 * Send more packets, trying to keep peer's receive window full. 1217 * If there is a memory error, pretend packet was sent, as it 1218 * will get retransmitted later anyway. 1219 */ 1220 while ((i = L2TP_SEQ_DIFF(seq->ns, seq->rack)) < seq->cwnd 1221 && seq->xwin[i] != NULL) { |
1222 if ((m = L2TP_COPY_MBUF(seq->xwin[i], M_DONTWAIT)) == NULL) |
1223 priv->stats.memoryFailures++; 1224 else 1225 ng_l2tp_xmit_ctrl(priv, m, seq->ns); 1226 seq->ns++; 1227 } 1228} 1229 1230/* --- 125 unchanged lines hidden (view full) --- 1356 hz * delay, ng_l2tp_seq_rack_timeout, node); 1357 1358 /* Do slow-start/congestion algorithm windowing algorithm */ 1359 seq->ssth = (seq->cwnd + 1) / 2; 1360 seq->cwnd = 1; 1361 seq->acks = 0; 1362 1363 /* Retransmit oldest unack'd packet */ |
1364 if ((m = L2TP_COPY_MBUF(seq->xwin[0], M_DONTWAIT)) == NULL) |
1365 priv->stats.memoryFailures++; 1366 else 1367 ng_l2tp_xmit_ctrl(priv, m, seq->rack); 1368 1369done: 1370 /* Done */ 1371 L2TP_SEQ_CHECK(seq); 1372 splx(s); --- 107 unchanged lines hidden --- |