History log of /freebsd-10.1-release/sys/netgraph/ng_ppp.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 272461 02-Oct-2014 gjb

Copy stable/10@r272459 to releng/10.1 as part of
the 10.1-RELEASE process.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


# 243882 05-Dec-2012 glebius

Mechanically substitute flags from historic mbuf allocator with
malloc(9) flags within sys.

Exceptions:

- sys/contrib not touched
- sys/mbuf.h edited manually


# 227293 07-Nov-2011 ed

Mark MALLOC_DEFINEs static that have no corresponding MALLOC_DECLAREs.

This means that their use is restricted to a single C file.


# 220768 18-Apr-2011 glebius

Node constructor methods are supposed to be called in syscall
context always. Convert nodes to consistently use M_WAITOK flag
for memory allocation.

Reviewed by: julian


# 206021 31-Mar-2010 mav

Remove some more alignment constraints.


# 206000 31-Mar-2010 mav

Make ng_ppp fulfill upper protocol stack layers alignment requirements
on platforms with strict alignment constraints.
This fixes kernel panics on arm and probably other architectures.

PR: sparc64/80410


# 187387 18-Jan-2009 mav

Remove strict limitation on minimal multilink MRRU. RFC claims that MRRU
of 1500 must be supported, but allows smaller values to be negotiated.
Enforce specified MRRU for outgoing frames.

MFC after: 2 weeks


# 184205 23-Oct-2008 des

Retire the MALLOC and FREE macros. They are an abomination unto style(9).

MFC after: 3 months


# 176057 06-Feb-2008 mav

Do not use bcmp() to compare two bytes with constants.


# 175698 26-Jan-2008 mav

Improve multilink receive performance by netgraph item reuse.


# 175697 26-Jan-2008 mav

Improve multilink xmit performance by netgraph item reuse.


# 175696 26-Jan-2008 mav

Improve multilink receive performance with fragment headers preallocation.


# 175594 23-Jan-2008 mav

Fix bundle xmit octets stats for packet-split operation mode.


# 172186 15-Sep-2007 mav

Fix typo which brokes VJ decompression
when VJC negotiated in only one direction.

Approved by: re (bmah), glebius (mentor)


# 171688 01-Aug-2007 mav

Add 64bit statistic counters to the ng_ppp node.
64bit counters are needed to simplify traffic accounting and
reduce system load at the big PPP concentrators.

Approved by: re (rwatson), glebius (mentor)


# 171681 01-Aug-2007 mav

This patch improves fine-grained locking for the ng_ppp node.
Till now node's transmit path was completely unprotected
and so wasn't thread safe in multilink mode. It's receive path was
declared as WRITER as the simpliest protection method but it
reduces performance when compression or encryption enabled.

Approved by: re (rwatson), glebius (mentor)


# 170283 04-Jun-2007 mav

No need to update link queue stats when round-robin algorithm enabled.

Approved by: glebius (mentor)


# 168898 20-Apr-2007 mav

Added m_tag_copy_chain() call to copy original outgoing packet tags to all of
it's fragments.

Reviewed by: archie
Approved by: glebius (mentor)


# 168897 20-Apr-2007 mav

Optimized packet distribution plan for the equal links case. Do not
split packet on fragments smaller then MP_MIN_FRAG_LEN to reduce total
overhead.

Reviewed by: archie
Approved by: glebius (mentor)


# 168896 20-Apr-2007 mav

- Changed sequence numbers processing to avoid incorrect timeout waiting
when one of links is inactive and have stale sequence number. To avoid
this sequence numbers of all links are getting updated on every
successful packet reassembling.
- ng_ppp_bump_mseq function created to simplify code.
- ng_ppp_frag_drop function separated from ng_ppp_frag_process to
simplify code.

Reviewed by: archie
Approved by: glebius (mentor)


# 168895 20-Apr-2007 mav

- Fixed mistakes in latency and xmitBytes calculation math
which lead to ineffective multilink packet distribution plans.
- Changed bytesInQueue calculation math to have more precise information
about links utilization.
- Taken rough account of the link overhead. Better way to do it could be to
get exact overhead from user-level, but I have not done it to keep
binary compatibility.

Reviewed by: archie
Approved by: glebius (mentor)


# 166234 25-Jan-2007 glebius

- Create ng_ppp_bypass() function, that prepares a packet
with bypass header, to send it out to userland.
- Use ng_ppp_bypass() in ng_ppp_proto_recv().
- Use ng_ppp_bypass() in ng_ppp_comp_recv() and in
ng_ppp_crypt_recv() if compression or encryption is
disabled, respectively.
- Any LCP packet goes directly to ng_ppp_bypass(), instead
of passing through PPP stack.
- Any non-LCP packet on disabled link is discarded. This
is behavior defined in RFC.

Submitted by: Alexander Motin <mav alkar.net>


# 166099 18-Jan-2007 mjacob

A less draconian fix to the build.


# 166097 18-Jan-2007 obrien

Temporarily comment out the KASSERT that broke the kernel build.


# 166093 18-Jan-2007 glebius

Revise the ng_ppp(4) node, so that code flow is more clear. All non-link
hooks get their per hook rcvdata methods, and all functions are organized
corresponding to protocol stack model.

Submitted by: Alexander Motin <mav alkar.net>
Reviewed by: archie, julian


# 165580 28-Dec-2006 glebius

Before this commit, if the compression is enabled the, ng_ppp(4)
node would send every outgoing frame to the "compress" hook.
Packets received on the "compress" hook were expected to be
compressed and PROT_COMPD tag was put on them unconditionally.

After this commit an alternative compression mode can be set.
In this mode the node doesn't put the PROT_COMPD, the compressor
should put it itself. This is important for such kind of
compressors, that can submit uncompressed frames.

Before this commit, if the decompression is enabled, the ng_ppp(4)
node would send and incoming frame to the "decompress" hook
only if it has the PROT_COMPD proto tag on it.

After this commit an alternative decompression mode can be set.
In this mode the node sends all the incoming packets to the
decompression hook. This is important for such kind of compressors
that need uncompressed packets too, to keep their library in sync.

These new features will be used in new version of mpd4, and in new
compressor nodes.

Submitted by: Alexander Motin <mav alkar.net>


# 146302 16-May-2005 glebius

Refactor places where ng_package_data() failed.

Suggested & reviewed by: archie


# 146283 16-May-2005 glebius

- Catch up with new interface to ng_package_data().
- Handle errors from ng_package_data().


# 140068 11-Jan-2005 glebius

Utilize callout_pending() macro


# 139823 06-Jan-2005 imp

/* -> /*- for license, minor formatting changes


# 138479 06-Dec-2004 glebius

- Use ng_callout() instead of timeout(9).
- Do not put/remove node references, since this no longer
needed.
- Remove timerActive flag, use callout flags.
- Schedule next callout after doing current one.

Reviewed by: archie
Approved by: julian (mentor)


# 138138 27-Nov-2004 archie

Disable protocol field compression on the inner PPP frame when also doing
normal PPP compression, as a workaround for certain (arguably) broken
Linux PPP implementations that can't handle this particular case.

MFC after: 1 week


# 133055 03-Aug-2004 bz

Do not change link[n].conf.latency for internal usage but have
link[n].latency calculated from user supplied value.
This prevents repeated NGM_PPP_SET_CONFIG/NGM_PPP_GET_CONFIG
from failing because of link[n].conf.latency being out of range.

Reviewed by: archie
Approved by: pjd (mentor)


# 132229 15-Jul-2004 glebius

Use qsort_r() instead of qsort() when sorting links by latency
This helps us to remove a global variable and a mutex protecting it.

Reviewed by: rwatson
Approved by: julian (mentor)


# 132162 14-Jul-2004 rwatson

Add ng_ppp_latencies_mtx, a global mutex to protect the latency list.
Note that the table is a hack, and so is this mutex.

Reviewed by: glebius


# 131155 26-Jun-2004 julian

Having moved metadata usage to mbuf tags, remove code that supports
the old way of doing it.

Submitted by: Gleb Smirnoff <glebius@cell.sick.ru>


# 129823 28-May-2004 julian

Switch to using C99 sparse initialisers for the type methods array.
Should make no binary difference.

Submitted by: Gleb Smirnoff <glebius@cell.sick.ru>
Reviewed by: Harti Brandt <harti@freebsd.org>
MFC after: 1 week


# 114216 29-Apr-2003 kan

Deprecate machine/limits.h in favor of new sys/limits.h.
Change all in-tree consumers to include <sys/limits.h>

Discussed on: standards@
Partially submitted by: Craig Rodrigues <rodrigc@attbi.com>


# 111934 05-Mar-2003 archie

Fix a use-after-free bug that could cause multi-link fragment reassembly to
fail for a long time (until the incoming sequence numbers wrapped around).

Reported by: Matthew Impett <mimpett@Glue.umd.edu>
MFC after: 3 days


# 111119 19-Feb-2003 imp

Back out M_* changes, per decision of the TRB.

Approved by: trb


# 109623 21-Jan-2003 alfred

Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0.
Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.


# 108107 19-Dec-2002 bmilekic

o Untangle the confusion with the malloc flags {M_WAITOK, M_NOWAIT} and
the mbuf allocator flags {M_TRYWAIT, M_DONTWAIT}.
o Fix a bpf_compat issue where malloc() was defined to just call
bpf_alloc() and pass the 'canwait' flag(s) along. It's been changed
to call bpf_alloc() but pass the corresponding M_TRYWAIT or M_DONTWAIT
flag (and only one of those two).

Submitted by: Hiten Pandya <hiten@unixdaemons.com> (hiten->commit_count++)


# 106665 08-Nov-2002 jhb

Use intptr_t to fix various sizeof(int) != sizeof(void *) warnings.


# 98063 09-Jun-2002 julian

if you have taken the mbuf out of the message object, then if you pass
the object to someone else, you need to put the mbuf back into it first..


# 97685 31-May-2002 archie

Fix GCC warnings caused by initializing a zero length array. In the process,
simply things a bit by getting rid of 'struct ng_parse_struct_info' which
was useless because it only contained one field.

MFC after: 2 weeks


# 92298 15-Mar-2002 archie

Fix bugs where the ng_ppp node could transmit PPP frames whose length
exceeded the peer's configured MRU or MRRU.

MFC after: 1 week


# 90595 12-Feb-2002 archie

Forced commit; the previous bug-fix commit was..

Submitted by: John Wiersema <J.Wiersema@flarion.com>


# 90594 12-Feb-2002 archie

Fix another bug in handling of multi-link sequence numbers.

MFC after: 1 week


# 87599 10-Dec-2001 obrien

Update to C99, s/__FUNCTION__/__func__/,
also don't use ANSI string concatenation.


# 70870 10-Jan-2001 julian

Fix some memory leaks
Add memory leak detection assitance.


# 70784 08-Jan-2001 julian

Part 2 of the netgraph rewrite.
This is mostly cosmetic changes, (though I caught a bug or two while
makeing them)
Reviewed by: archie@freebsd.org


# 70700 05-Jan-2001 julian

Rewrite of netgraph to start getting ready for SMP.
This version is functional and is aproaching solid..
notice I said APROACHING. There are many node types I cannot test
I have tested: echo hole ppp socket vjc iface tee bpf async tty
The rest compile and "Look" right. More changes to follow.
DEBUGGING is enabled in this code to help if people have problems.


# 70159 18-Dec-2000 julian

Divorce the kernel binary ABI version number from the message
format version number. (userland programs should not need to be
recompiled when the netgraph kernel internal ABI is changed.

Also fix modules that don;t handle the fact that a caller may not supply
a return message pointer. (benign at the moment because the calling code
checks, but that will change)


# 70157 18-Dec-2000 archie

Use "node->ID" for the node's ID, instead of "(long)node".

Reported by: julian


# 69922 12-Dec-2000 julian

Reviewed by: Archie@freebsd.org
This clears out my outstanding netgraph changes.
There is a netgraph change of design in the offing and this is to some
extent a superset of soem of the new functionality and some of the old
functionality that may be removed.

This code works as before, but allows some new features that I want to
work with and evaluate. It is the basis for a version of netgraph
with integral locking for SMP use.

This is running on my test machine with no new problems :-)


# 68876 18-Nov-2000 dwmalone

Add the use of M_ZERO to netgraph.

Submitted by: josh@zipperup.org
Submitted by: Robert Drehmel <robd@gmx.net>
Submitted by: archie
Approved by: archie


# 68761 15-Nov-2000 mckusick

In preparation for deprecating CIRCLEQ macros in favor of TAILQ
macros which provide the same functionality and are a bit more
efficient, convert use of CIRCLEQ's in netgraph PPP code to TAILQ's.

Reviewed by: Archie Cobbs <archie@dellroad.org>


# 66775 06-Oct-2000 archie

More complete fix for multi-link sequence number handling bugs.
Add a new control message for querying the sequence number state.


# 66764 06-Oct-2000 archie

Fix bug in handling of multi-link sequence numbers.

Reported by: Becca Anderson <becca@worldint.com>


# 66260 22-Sep-2000 archie

Remove unnecessary #include's as reported by phk's script.


# 66182 21-Sep-2000 archie

Allocate all memory (including within node constructors) with M_NOWAIT
instead of M_WAITOK, to allow for maximum flexibility.


# 64517 10-Aug-2000 archie

Oops, previous commit fixed a bug that was already fixed before.
Back it out.


# 64443 08-Aug-2000 archie

Fix bug where bundle-level receive statistics were not getting updated.


# 61143 31-May-2000 archie

Fix bug where receive statistics for the bundle were not getting updated.


# 60938 26-May-2000 jake

Back out the previous change to the queue(3) interface.
It was not discussed and should probably not happen.

Requested by: msmith and others


# 60833 23-May-2000 jake

Change the way that the queue(3) structures are declared; don't assume that
the type argument to *_HEAD and *_ENTRY is a struct.

Suggested by: phk
Reviewed by: phk
Approved by: mdodd


# 59882 01-May-2000 archie

Fix broken multi-link fragment reassembly algorithm.
Add hook for IPv6. Misc cleanups.

PR: kern/16335


# 59728 28-Apr-2000 julian

Two simple changes to the kernel internal API for netgraph modules,
to support future work in flow-control and 'packet reject/replace'
processing modes.

reviewed by: phk, archie


# 55481 05-Jan-2000 archie

Fix a few obscure memory leaks.


# 54755 17-Dec-1999 archie

Fix bugs in the MP fragment reassembly code that can cause a panic.


# 54249 07-Dec-1999 julian

Remove a bunch of un-needed includes.
Submitted by: phk@freebsd.org


# 53913 30-Nov-1999 archie

Add two new generic control messages, NGM_ASCII2BINARY and
NGM_BINARY2ASCII, which convert control messages to ASCII and back.
This allows control messages to be sent and received in ASCII form
using ngctl(8), which makes ngctl a lot more useful.

This also allows all the type-specific debugging code in libnetgraph
to go away -- instead, we just ask the node itself to do the ASCII
translation for us.

Currently, all generic control messages are supported, as well as
messages associated with the following node types: async, cisco,
ksocket, and ppp.

See /usr/share/examples/netgraph/ngctl for an example of using this.

Also give ngctl(8) the ability to print out incoming data and
control messages at any time. Eventually nghook(8) may be subsumed.

Several other misc. bug fixes.

Reviewed by: julian


# 53648 23-Nov-1999 archie

Change the prototype of the strto* routines to make the second
parameter a char ** instead of a const char **. This make these
kernel routines consistent with the corresponding libc userland
routines.

Which is actually 'correct' is debatable, but consistency and
following the spec was deemed more important in this case.

Reviewed by (in concept): phk, bde


# 53406 19-Nov-1999 archie

Fix bug where hook pointers were not getting updated on disconnection.


# 53088 10-Nov-1999 archie

More bug fixes.


# 53075 10-Nov-1999 archie

Move handling of the address and control fields into the PPP node;
they belong there because they are device independent.
Also some other misc. fixes.


# 52912 06-Nov-1999 archie

Fix several bugs found in the first bit of testing.


# 52843 03-Nov-1999 phk

Move isfoo() and friends to the newly created sys/ctype.h.

Urged by: bde


# 52816 02-Nov-1999 archie

Simplify checking/parsing of strings using strtoul(), isdigit(), etc.


# 52766 01-Nov-1999 archie

Fix some bugs in MP allocation routine when links are non-equivalent.


# 52752 01-Nov-1999 julian

Add typedefs for node methods
Suggested by phk.


# 52639 29-Oct-1999 archie

Revamped and more useful PPP node type, supporting multi-link PPP directly.
This is one piece of the grand unified PPP daemon concept, whereby using
netgraph nodes enables PPP data to be handled completely in kernel land,
while leaving negotiation/control to be handled by a single user land
daemon, no matter what the link type(s).

This is a safety checkin only; it compiles, but is utterly untested.

Concept reviewed by: julian, brian


# 52419 21-Oct-1999 julian

Whistle's Netgraph link-layer (sometimes more) networking infrastructure.
Been in production for 3 years now. Gives Instant Frame relay to if_sr
and if_ar drivers, and PPPOE support soon. See:
ftp://ftp.whistle.com/pub/archie/netgraph/index.html
for on-line manual pages.

Reviewed by: Doug Rabson (dfr@freebsd.org)
Obtained from: Whistle CVS tree