It has almost a two years passed since last stable release of mpd3.18 
and I must say that this time wasn't spent useless. Comparing to the 
3.18, release 4.1 presents:
- performance multithreading auth backend,
- IPv6 support,
- L2TP link type,
- working TCP and UDP link types,
- NetFlow,
- NAT,
- new Telnet console,
- WEB interface,
- Deflate and Predictor-1 traffic compression,
- DESE-bis traffic encryption,
- _HUGE_ amount of bug fixes, refactoring cases and performance 
optimizations.
Considering above, the mpd3.x branch is announced as legacy and will not 
be anymore supported and updated. All mpd users are strongly recommended 
to upgrade to the latest 4.x release.
Complete change log of MPD4 branch you can find here:
http://mpd.sourceforge.net/doc/mpd5.html
You can download mpd in source form here:
http://sourceforge.net/project/showfiles.php?group_id=14145
, or install it via FreeBSD ports system.
-- 
Alexander Motin m...@alkar.net
You can't imagine how much your effort is appreciated!
We'll be looking at mpd4.1 this or next week during the
FreeBSD course at specialist.ru. It really seems you've
done a lot to shorten the learning curve while giving a
boost to functionality.
Thanks!
> I am glad to present you the first stable release of mpd4.x branch - the
> mpd4.1!
Thank you very much, great software!
I testing it now and have some bug reports...
I have set netflow node <nodename> option in mpd.conf to attach to
existing ng_netflow node
---
default:
 load psrv1
 load psrv3
 ...
pppoe:
 ...
 set netflow node netflow
 set netflow export 172.16.2.35 9996
 ...
psrv1:
 new -n -i ng1 pppoe1 pppoe1
 load pppoe
psrv3:
 new -n -i ng2 pppoe2 pppoe2
 load pppoe
 ...
---
After loading I got:
ngctl list
There are 115 total nodes:
  ...
  Name: mpd45965-pppoe3-bpf Type: bpf             ID: 000017ce   Num hooks: 5
  Name: mpd45965-pppoe3-vjc Type: vjc             ID: 000017cd   Num hooks: 4
  Name: mpd45965-pppoe3 Type: ppp             ID: 000017cc   Num hooks: 7
  Name: ng3             Type: iface           ID: 000017cb   Num hooks: 2
  Name: mpd45965-pppoe3-so Type: socket          ID: 000017ca   Num hooks: 2
  Name: <unnamed>       Type: socket          ID: 000017c9   Num hooks: 1
  Name: mpd45965-mss    Type: tcpmss          ID: 000017c8   Num hooks: 40
  Name: mpd45965-nfso   Type: ksocket         ID: 000017c7   Num hooks: 1
  Name: mpd45965-nf     Type: netflow         ID: 000017c6   Num hooks: 3
  Name: mpd45965-pppoe1-bpf Type: bpf             ID: 000017c5   Num hooks: 5
  Name: mpd45965-pppoe1-vjc Type: vjc             ID: 000017c4   Num hooks: 4
  Name: mpd45965-pppoe1 Type: ppp             ID: 000017c3   Num hooks: 8
  Name: ng1             Type: iface           ID: 000017c2   Num hooks: 2
  Name: mpd45965-pppoe1-so Type: socket          ID: 000017c1   Num hooks: 2
  Name: mpd43388-nfso   Type: ksocket         ID: 00001759   Num hooks: 1
  Name: mpd43388-nf     Type: netflow         ID: 00001758   Num hooks: 1
  Name: <unnamed>       Type: ksocket         ID: 000016e5   Num hooks: 1
  Name: netflow         Type: netflow         ID: 000016e4   Num hooks: 5
  Name: <unnamed>       Type: pppoe           ID: 00001691   Num hooks: 3
  Name: ng0             Type: iface           ID: 00001630   Num hooks: 0
  Name: ng2             Type: iface           ID: 00000013   Num hooks: 0
  Name: vlan4           Type: ether           ID: 0000000b   Num hooks: 1
  Name: rl0             Type: ether           ID: 0000000a   Num hooks: 2
First created bundle stay something special, it don't see
gNetflowNodeName, but rest connected correctly. Later, variable
gNetflowNodeName for first bundle is set and on shutdown mpd not
cleaning corresponding nodes. You can see two nodes from pid 43388...
OK. This works. Thanks...
One more questions.
a) Device type l2tp (copy pppoe config with changed device type)
produce INVARIANTS KASSERT in sys/netgraph/ng_l2tp.c on first packet
from nearest cisco :(
b) Now on exit not cleaned only three nodes:
...
  Name: <unnamed>       Type: pppoe           ID: 00001843   Num hooks: 1
  Name: ng0             Type: iface           ID: 00001630   Num hooks: 0
  Name: ng2             Type: iface           ID: 00000013   Num hooks: 0
...
pyvo# ngctl show \[00001843\]:
  Name: <unnamed>       Type: pppoe           ID: 00001843   Num hooks: 1
  Local hook      Peer name       Peer type    Peer ID         Peer hook
  ----------      ---------       ---------    -------         ---------
  ethernet        vlan4           ether        0000000b        orphans
>
> --
> Alexander Motin m...@alkar.net
> Optima Telecom
>
I know about one KASSERT problem in ng_l2tp. I have already sent patches 
to the commiter and waiting for his reply. You can try patch from 
attachment.
> b) Now on exit not cleaned only three nodes:
> ...
>  Name: <unnamed>       Type: pppoe           ID: 00001843   Num hooks: 1
This is current normal behavior. It doesn't usually make any problems.
>  Name: ng0             Type: iface           ID: 00001630   Num hooks: 0
>  Name: ng2             Type: iface           ID: 00000013   Num hooks: 0
This is strange. I think it can be result of using -i parameter at 
bundle creation. Try to not use it.
Patch works, I now can connect cisco router without KASSERTs
>
> > b) Now on exit not cleaned only three nodes:
> > ...
> >  Name: <unnamed>       Type: pppoe           ID: 00001843   Num hooks: 1
>
> This is current normal behavior. It doesn't usually make any problems.
OK
>
> >  Name: ng0             Type: iface           ID: 00001630   Num hooks: 0
> >  Name: ng2             Type: iface           ID: 00000013   Num hooks: 0
>
> This is strange. I think it can be result of using -i parameter at
> bundle creation. Try to not use it.
This clear all issues for now. Thank you!!!
Hi,
--- ng_l2tp.c.orig	Sat Feb 10 06:58:03 2007
+++ ng_l2tp.c	Sat Feb 10 06:58:00 2007
@@ -1121,6 +1121,10 @@
  	/* If ack is still outstanding, send a ZLB */
-	if (seq->xack != seq->nr)
+	if (seq->xack != seq->nr) {
  		ng_l2tp_xmit_ctrl(priv, NULL, seq->ns);
+		/* If there was memory error, ignore it.
+		   We must keep state consistent here. */
+		seq->xack = seq->nr;
+	}
This change is not needed. ng_l2tp_xmit_ctrl() does this already.
It's not a good idea to remove the L2TP_SEQ_CHECK()s.
Been there years ago but seems I missed to get this fixed
in the FreeBSD repo.
The problem is in ng_l2tp_seq_check(). Fix it there.
/bz
-- 
Bjoern A. Zeeb				bzeeb at Zabbadoz dot NeT
It does this usually. But in case of no free mbufs it does not. Usually 
it's ok. But in this case it will lead to assertion in next check. The 
other way is to schedule next timeout, but in lack of system resources 
it can be better to just skip this packet.
> It's not a good idea to remove the L2TP_SEQ_CHECK()s.
It is _incorrect_ to call it there. When ng_l2tp_seq_xack_timeout() 
called callout_pending() function will already return FALSE because of 
timeout already ended. But at this moment action is not actually done 
and seq->xack != seq->nr. This leads to KASSERT without any reason.
> Been there years ago but seems I missed to get this fixed
> in the FreeBSD repo.
> The problem is in ng_l2tp_seq_check(). Fix it there.
Problem is not there! ng_l2tp_seq_check() works correctly from it's 
point of view.