projects
/
l2tpns.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e6bb332
)
set acct-disconnect-cause from result code AVP if no disconnect cause AVP is present
author
bodea
<bodea>
Thu, 22 Jun 2006 15:30:29 +0000
(15:30 +0000)
committer
bodea
<bodea>
Thu, 22 Jun 2006 15:30:29 +0000
(15:30 +0000)
Changes
patch
|
blob
|
history
l2tpns.c
patch
|
blob
|
history
l2tpns.spec
patch
|
blob
|
history
diff --git
a/Changes
b/Changes
index
046dfc6
..
319091e
100644
(file)
--- a/
Changes
+++ b/
Changes
@@
-1,4
+1,4
@@
-* Fri Jun
9
2006 Brendan O'Dea <bod@optus.net> 2.2.0
+* Fri Jun
23
2006 Brendan O'Dea <bod@optus.net> 2.2.0
- Only poll clifd if successfully bound.
- Add "Practical VPNs" document from Liran Tal as Docs/vpn .
- Add Multilink support from Khaled Al Hamwi.
- Only poll clifd if successfully bound.
- Add "Practical VPNs" document from Liran Tal as Docs/vpn .
- Add Multilink support from Khaled Al Hamwi.
@@
-6,6
+6,8
@@
- Convert manual.html to Docbook.
- Kludge around problem with Netgear DM602 authentication.
- Add session/idle timeouts (Graham Maltby).
- Convert manual.html to Docbook.
- Kludge around problem with Netgear DM602 authentication.
- Add session/idle timeouts (Graham Maltby).
+- Use result code AVP to set Acct-Terminate-Cause is disconnect cause
+ AVP is not present.
* Tue Apr 18 2006 Brendan O'Dea <bod@optus.net> 2.1.18
- Don't shutdown on TerminateReq, wait for CDN.
* Tue Apr 18 2006 Brendan O'Dea <bod@optus.net> 2.1.18
- Don't shutdown on TerminateReq, wait for CDN.
diff --git
a/l2tpns.c
b/l2tpns.c
index
60fc7c8
..
8fccdfc
100644
(file)
--- a/
l2tpns.c
+++ b/
l2tpns.c
@@
-4,7
+4,7
@@
// Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
// vim: sw=8 ts=8
// Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
// vim: sw=8 ts=8
-char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.16
7 2006/06/11 12:46:18
bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.16
8 2006/06/22 15:30:29
bodea Exp $";
#include <arpa/inet.h>
#include <assert.h>
#include <arpa/inet.h>
#include <assert.h>
@@
-2184,9
+2184,10
@@
void processudp(uint8_t *buf, int len, struct sockaddr_in *addr)
int error = 0;
char *msg = 0;
int error = 0;
char *msg = 0;
- // default disconnect cause/message on receipt
- // of CDN (set to more specific value from
- // attribute 46 if present below).
+ // Default disconnect cause/message on receipt of CDN. Set to
+ // more specific value from attribute 1 (result code) or 46
+ // (disconnect cause) if present below.
+ int disc_cause_set = 0;
int disc_cause = TERM_NAS_REQUEST;
char const *disc_reason = "Closed (Received CDN).";
int disc_cause = TERM_NAS_REQUEST;
char const *disc_reason = "Closed (Received CDN).";
@@
-2296,25
+2297,41
@@
void processudp(uint8_t *buf, int len, struct sockaddr_in *addr)
case 1: // result code
{
uint16_t rescode = ntohs(*(uint16_t *) b);
case 1: // result code
{
uint16_t rescode = ntohs(*(uint16_t *) b);
- const char* resdesc = "(unknown)";
+ char const *resdesc = "(unknown)";
+ char const *errdesc = NULL;
+ int cause = 0;
+
if (message == 4)
{ /* StopCCN */
resdesc = l2tp_stopccn_result_code(rescode);
if (message == 4)
{ /* StopCCN */
resdesc = l2tp_stopccn_result_code(rescode);
+ cause = TERM_LOST_SERVICE;
}
else if (message == 14)
{ /* CDN */
resdesc = l2tp_cdn_result_code(rescode);
}
else if (message == 14)
{ /* CDN */
resdesc = l2tp_cdn_result_code(rescode);
+ if (rescode == 1)
+ cause = TERM_LOST_CARRIER;
+ else
+ cause = TERM_ADMIN_RESET;
}
LOG(4, s, t, " Result Code %u: %s\n", rescode, resdesc);
if (n >= 4)
{
uint16_t errcode = ntohs(*(uint16_t *)(b + 2));
}
LOG(4, s, t, " Result Code %u: %s\n", rescode, resdesc);
if (n >= 4)
{
uint16_t errcode = ntohs(*(uint16_t *)(b + 2));
- LOG(4, s, t, " Error Code %u: %s\n", errcode, l2tp_error_code(errcode));
+ errdesc = l2tp_error_code(errcode);
+ LOG(4, s, t, " Error Code %u: %s\n", errcode, errdesc);
}
if (n > 4)
LOG(4, s, t, " Error String: %.*s\n", n-4, b+4);
}
if (n > 4)
LOG(4, s, t, " Error String: %.*s\n", n-4, b+4);
+ if (cause && disc_cause_set < mtype) // take cause from attrib 46 in preference
+ {
+ disc_cause_set = mtype;
+ disc_reason = errdesc ? errdesc : resdesc;
+ disc_cause = cause;
+ }
+
break;
}
break;
break;
}
break;
@@
-2506,6
+2523,8
@@
void processudp(uint8_t *buf, int len, struct sockaddr_in *addr)
"(code=%u, proto=%04X, dir=%u, msg=\"%.*s\")\n",
code, proto, dir, n - 5, b + 5);
"(code=%u, proto=%04X, dir=%u, msg=\"%.*s\")\n",
code, proto, dir, n - 5, b + 5);
+ disc_cause_set = mtype;
+
switch (code)
{
case 1: // admin disconnect
switch (code)
{
case 1: // admin disconnect
diff --git
a/l2tpns.spec
b/l2tpns.spec
index
9507981
..
e3b34c1
100644
(file)
--- a/
l2tpns.spec
+++ b/
l2tpns.spec
@@
-43,5
+43,5
@@
rm -rf %{buildroot}
%attr(644,root,root) /usr/share/man/man[58]/*
%changelog
%attr(644,root,root) /usr/share/man/man[58]/*
%changelog
-* Fri Jun
9
2006 Brendan O'Dea <bod@optus.net> 2.2.0-1
+* Fri Jun
23
2006 Brendan O'Dea <bod@optus.net> 2.2.0-1
- 2.2.0 release, see /usr/share/doc/l2tpns-2.2.0/Changes
- 2.2.0 release, see /usr/share/doc/l2tpns-2.2.0/Changes