PPP statistics optional (non working) compile time option added

This commit is contained in:
Sylvain Rochet 2012-06-02 16:41:09 +02:00
parent 4158222e86
commit 922d3716ff
8 changed files with 224 additions and 80 deletions

View File

@ -643,7 +643,9 @@ link_terminated(unit)
if (!doing_multilink) { if (!doing_multilink) {
notice("Connection terminated."); notice("Connection terminated.");
#if PPP_STATS_SUPPORT
print_link_stats(); print_link_stats();
#endif /* PPP_STATS_SUPPORT */
} else } else
notice("Link terminated."); notice("Link terminated.");
@ -1242,11 +1244,12 @@ static void
check_maxoctets(arg) check_maxoctets(arg)
void *arg; void *arg;
{ {
#if PPP_STATS_SUPPORT
unsigned int used; unsigned int used;
update_link_stats(ifunit); update_link_stats(ifunit);
link_stats_valid=0; link_stats_valid=0;
switch(maxoctets_dir) { switch(maxoctets_dir) {
case PPP_OCTETS_DIRECTION_IN: case PPP_OCTETS_DIRECTION_IN:
used = link_stats.bytes_in; used = link_stats.bytes_in;
@ -1270,8 +1273,9 @@ check_maxoctets(arg)
} else { } else {
TIMEOUT(check_maxoctets, NULL, maxoctets_timeout); TIMEOUT(check_maxoctets, NULL, maxoctets_timeout);
} }
#endif /* PPP_STATS_SUPPORT */
} }
#endif #endif /* MAXOCTETS */
/* /*
* check_idle - check whether the link has been idle for long * check_idle - check whether the link has been idle for long

View File

@ -1958,7 +1958,9 @@ ipcp_up(f)
notice("secondary DNS address %I", go->dnsaddr[1]); notice("secondary DNS address %I", go->dnsaddr[1]);
} }
#if PPP_STATS_SUPPORT
reset_link_stats(f->unit); reset_link_stats(f->unit);
#endif /* PPP_STATS_SUPPORT */
np_up(f->unit, PPP_IP); np_up(f->unit, PPP_IP);
ipcp_is_up = 1; ipcp_is_up = 1;
@ -1982,11 +1984,13 @@ ipcp_down(f)
fsm *f; fsm *f;
{ {
IPCPDEBUG(("ipcp: down")); IPCPDEBUG(("ipcp: down"));
#if PPP_STATS_SUPPORT
/* XXX a bit IPv4-centric here, we only need to get the stats /* XXX a bit IPv4-centric here, we only need to get the stats
* before the interface is marked down. */ * before the interface is marked down. */
/* XXX more correct: we must get the stats before running the notifiers, /* XXX more correct: we must get the stats before running the notifiers,
* at least for the radius plugin */ * at least for the radius plugin */
update_link_stats(f->unit); update_link_stats(f->unit);
#endif /* PPP_STATS_SUPPORT */
#if PPP_NOTIFY #if PPP_NOTIFY
notify(ip_down_notifier, 0); notify(ip_down_notifier, 0);
#endif /* PPP_NOTIFY */ #endif /* PPP_NOTIFY */
@ -1998,9 +2002,11 @@ ipcp_down(f)
} }
sifvjcomp(f->unit, 0, 0, 0); sifvjcomp(f->unit, 0, 0, 0);
#if PPP_STATS_SUPPORT
print_link_stats(); /* _after_ running the notifiers and ip_down_hook(), print_link_stats(); /* _after_ running the notifiers and ip_down_hook(),
* because print_link_stats() sets link_stats_valid * because print_link_stats() sets link_stats_valid
* to 0 (zero) */ * to 0 (zero) */
#endif /* PPP_STATS_SUPPORT */
#if DEMAND_SUPPORT #if DEMAND_SUPPORT
/* /*

View File

@ -2629,8 +2629,10 @@ LcpSendEchoRequest (f)
if (lcp_echo_adaptive) { if (lcp_echo_adaptive) {
static unsigned int last_pkts_in = 0; static unsigned int last_pkts_in = 0;
#if PPP_STATS_SUPPORT
update_link_stats(f->unit); update_link_stats(f->unit);
link_stats_valid = 0; link_stats_valid = 0;
#endif /* PPP_STATS_SUPPORT */
if (link_stats.pkts_in != last_pkts_in) { if (link_stats.pkts_in != last_pkts_in) {
last_pkts_in = link_stats.pkts_in; last_pkts_in = link_stats.pkts_in;

View File

@ -279,7 +279,9 @@ void mp_bundle_terminated()
bundle_terminating = 1; bundle_terminating = 1;
upper_layers_down(0); upper_layers_down(0);
notice("Connection terminated."); notice("Connection terminated.");
#if PPP_STATS_SUPPORT
print_link_stats(); print_link_stats();
#endif /* PPP_STATS_SUPPORT */
if (!demand) { if (!demand) {
remove_pidfiles(); remove_pidfiles();
script_unsetenv("IFNAME"); script_unsetenv("IFNAME");

View File

@ -198,12 +198,12 @@ GIDSET_TYPE groups[NGROUPS_MAX];/* groups the user is in */
int ngroups; /* How many groups valid in groups */ int ngroups; /* How many groups valid in groups */
#endif /* UNUSED */ #endif /* UNUSED */
static struct timeval start_time; /* Time when link was started. */ //static struct timeval start_time; /* Time when link was started. */
static struct pppd_stats old_link_stats; //static struct pppd_stats old_link_stats;
struct pppd_stats link_stats; //struct pppd_stats link_stats;
unsigned link_connect_time; //unsigned link_connect_time;
int link_stats_valid; //int link_stats_valid;
int error_count; int error_count;
@ -249,7 +249,9 @@ static void childwait_end __P((void *));
static void handle_events __P((void)); static void handle_events __P((void));
#endif #endif
#if 0
void print_link_stats __P((void)); void print_link_stats __P((void));
#endif
extern char *ttyname __P((int)); extern char *ttyname __P((int));
extern char *getlogin __P((void)); extern char *getlogin __P((void));
@ -794,6 +796,7 @@ detach()
} }
#endif #endif
#if 0
/* /*
* reopen_log - (re)open our connection to syslog. * reopen_log - (re)open our connection to syslog.
*/ */
@ -803,6 +806,7 @@ reopen_log()
openlog("pppd", LOG_PID | LOG_NDELAY, LOG_PPP); openlog("pppd", LOG_PID | LOG_NDELAY, LOG_PPP);
setlogmask(LOG_UPTO(LOG_INFO)); setlogmask(LOG_UPTO(LOG_INFO));
} }
#endif
#if 0 #if 0
/* /*
@ -1066,6 +1070,7 @@ cleanup()
} }
#endif #endif
#if 0
void void
print_link_stats() print_link_stats()
{ {
@ -1127,7 +1132,7 @@ update_link_stats(u)
script_setenv("BYTES_RCVD", numbuf, 0); script_setenv("BYTES_RCVD", numbuf, 0);
#endif #endif
} }
#endif
struct callout { struct callout {
struct timeval c_time; /* time at which to call routine */ struct timeval c_time; /* time at which to call routine */

View File

@ -86,7 +86,9 @@
* Option descriptor structure. * Option descriptor structure.
*/ */
#ifndef bool
typedef unsigned char bool; typedef unsigned char bool;
#endif
#if 0 #if 0
enum opt_type { enum opt_type {
@ -166,6 +168,7 @@ struct permitted_ip {
}; };
#endif #endif
#if 0
/* /*
* Unfortunately, the linux kernel driver uses a different structure * Unfortunately, the linux kernel driver uses a different structure
* for statistics from the rest of the ports. * for statistics from the rest of the ports.
@ -178,6 +181,7 @@ struct pppd_stats {
unsigned int pkts_in; unsigned int pkts_in;
unsigned int pkts_out; unsigned int pkts_out;
}; };
#endif
/* Used for storing a sequence of words. Usually malloced. */ /* Used for storing a sequence of words. Usually malloced. */
struct wordlist { struct wordlist {
@ -236,9 +240,11 @@ extern int detached; /* Have detached from controlling tty */
extern GIDSET_TYPE groups[NGROUPS_MAX]; /* groups the user is in */ extern GIDSET_TYPE groups[NGROUPS_MAX]; /* groups the user is in */
#endif #endif
extern int ngroups; /* How many groups valid in groups */ extern int ngroups; /* How many groups valid in groups */
#if PPP_STATS_SUPPORT
extern struct pppd_stats link_stats; /* byte/packet counts etc. for link */ extern struct pppd_stats link_stats; /* byte/packet counts etc. for link */
extern int link_stats_valid; /* set if link_stats is valid */ extern int link_stats_valid; /* set if link_stats is valid */
extern unsigned link_connect_time; /* time the link was up for */ extern unsigned link_connect_time; /* time the link was up for */
#endif /* PPP_STATS_SUPPORT */
extern int using_pty; /* using pty as device (notty or pty opt.) */ extern int using_pty; /* using pty as device (notty or pty opt.) */
extern int log_to_fd; /* logging to this fd as well as syslog */ extern int log_to_fd; /* logging to this fd as well as syslog */
extern bool log_default; /* log_to_fd is default (stdout) */ extern bool log_default; /* log_to_fd is default (stdout) */
@ -522,10 +528,14 @@ pid_t safe_fork __P((int, int, int)); /* Fork & close stuff in child */
//int device_script __P((char *cmd, int in, int out, int dont_wait)); //int device_script __P((char *cmd, int in, int out, int dont_wait));
/* Run `cmd' with given stdin and stdout */ /* Run `cmd' with given stdin and stdout */
#if 0
void reopen_log __P((void)); /* (re)open the connection to syslog */ void reopen_log __P((void)); /* (re)open the connection to syslog */
#endif
#if 0
void print_link_stats __P((void)); /* Print stats, if available */ void print_link_stats __P((void)); /* Print stats, if available */
void reset_link_stats __P((int)); /* Reset (init) stats when link goes up */ void reset_link_stats __P((int)); /* Reset (init) stats when link goes up */
void update_link_stats __P((int)); /* Get stats at link termination */ void update_link_stats __P((int)); /* Get stats at link termination */
#endif
#if 0 /* UNUSED */ #if 0 /* UNUSED */
void script_setenv __P((char *, char *, int)); /* set script env var */ void script_setenv __P((char *, char *, int)); /* set script env var */
void script_unsetenv __P((char *)); /* unset script env var */ void script_unsetenv __P((char *)); /* unset script env var */
@ -536,8 +546,8 @@ void add_notifier __P((struct notifier **, notify_func, void *));
void remove_notifier __P((struct notifier **, notify_func, void *)); void remove_notifier __P((struct notifier **, notify_func, void *));
void notify __P((struct notifier *, int)); void notify __P((struct notifier *, int));
#endif /* UNUSED */ #endif /* UNUSED */
int ppp_send_config __P((int, int, u_int32_t, int, int)); //int ppp_send_config __P((int, int, u_int32_t, int, int));
int ppp_recv_config __P((int, int, u_int32_t, int, int)); //int ppp_recv_config __P((int, int, u_int32_t, int, int));
//void remove_pidfiles __P((void)); //void remove_pidfiles __P((void));
void lock_db __P((void)); void lock_db __P((void));
void unlock_db __P((void)); void unlock_db __P((void));
@ -668,21 +678,21 @@ int ccp_test __P((int, u_char *, int, int));
void ccp_flags_set __P((int, int, int)); void ccp_flags_set __P((int, int, int));
/* Set kernel CCP state */ /* Set kernel CCP state */
int ccp_fatal_error __P((int)); /* Test for fatal decomp error in kernel */ int ccp_fatal_error __P((int)); /* Test for fatal decomp error in kernel */
int get_idle_time __P((int, struct ppp_idle *)); //int get_idle_time __P((int, struct ppp_idle *));
/* Find out how long link has been idle */ /* Find out how long link has been idle */
int get_ppp_stats __P((int, struct pppd_stats *)); //int get_ppp_stats __P((int, struct pppd_stats *));
/* Return link statistics */ /* Return link statistics */
void netif_set_mtu __P((int, int)); /* Set PPP interface MTU */ //void netif_set_mtu __P((int, int)); /* Set PPP interface MTU */
int netif_get_mtu __P((int)); /* Get PPP interface MTU */ //int netif_get_mtu __P((int)); /* Get PPP interface MTU */
int sifvjcomp __P((int, int, int, int)); //int sifvjcomp __P((int, int, int, int));
/* Configure VJ TCP header compression */ /* Configure VJ TCP header compression */
int sifup __P((int)); /* Configure i/f up for one protocol */ //int sifup __P((int)); /* Configure i/f up for one protocol */
int sifnpmode __P((int u, int proto, enum NPmode mode)); //int sifnpmode __P((int u, int proto, enum NPmode mode));
/* Set mode for handling packets for proto */ /* Set mode for handling packets for proto */
int sifdown __P((int)); /* Configure i/f down for one protocol */ //int sifdown __P((int)); /* Configure i/f down for one protocol */
int sifaddr __P((int, u_int32_t, u_int32_t, u_int32_t)); //int sifaddr __P((int, u_int32_t, u_int32_t, u_int32_t));
/* Configure IPv4 addresses for i/f */ /* Configure IPv4 addresses for i/f */
int cifaddr __P((int, u_int32_t, u_int32_t)); //int cifaddr __P((int, u_int32_t, u_int32_t));
/* Reset i/f IP addresses */ /* Reset i/f IP addresses */
#ifdef INET6 #ifdef INET6
int sif6addr __P((int, eui64_t, eui64_t)); int sif6addr __P((int, eui64_t, eui64_t));
@ -690,15 +700,15 @@ int sif6addr __P((int, eui64_t, eui64_t));
int cif6addr __P((int, eui64_t, eui64_t)); int cif6addr __P((int, eui64_t, eui64_t));
/* Remove an IPv6 address from i/f */ /* Remove an IPv6 address from i/f */
#endif #endif
int sifdefaultroute __P((int, u_int32_t, u_int32_t, bool replace_default_rt)); //int sifdefaultroute __P((int, u_int32_t, u_int32_t, bool replace_default_rt));
/* Create default route through i/f */ /* Create default route through i/f */
int cifdefaultroute __P((int, u_int32_t, u_int32_t)); //int cifdefaultroute __P((int, u_int32_t, u_int32_t));
/* Delete default route through i/f */ /* Delete default route through i/f */
int sifproxyarp __P((int, u_int32_t)); //int sifproxyarp __P((int, u_int32_t));
/* Add proxy ARP entry for peer */ /* Add proxy ARP entry for peer */
int cifproxyarp __P((int, u_int32_t)); //int cifproxyarp __P((int, u_int32_t));
/* Delete proxy ARP entry for peer */ /* Delete proxy ARP entry for peer */
u_int32_t GetMask __P((u_int32_t)); /* Get appropriate netmask for address */ //u_int32_t GetMask __P((u_int32_t)); /* Get appropriate netmask for address */
#if 0 /* Unused */ #if 0 /* Unused */
int lock __P((char *)); /* Create lock file for device */ int lock __P((char *)); /* Create lock file for device */
int relock __P((int)); /* Rewrite lock file with new pid */ int relock __P((int)); /* Rewrite lock file with new pid */

View File

@ -26,6 +26,15 @@
/* FIXME: add a phase per PPP session */ /* FIXME: add a phase per PPP session */
int phase; /* where the link is at */ int phase; /* where the link is at */
/* FIXME: add stats per PPP session */
#if PPP_STATS_SUPPORT
static struct timeval start_time; /* Time when link was started. */
static struct pppd_stats old_link_stats;
struct pppd_stats link_stats;
unsigned link_connect_time;
int link_stats_valid;
#endif /* PPP_STATS_SUPPORT */
/* PPP packet parser states. Current state indicates operation yet to be /* PPP packet parser states. Current state indicates operation yet to be
* completed. */ * completed. */
typedef enum { typedef enum {
@ -148,8 +157,7 @@ PACK_STRUCT_END
/** Initiate LCP open request */ /** Initiate LCP open request */
static void pppStart(int pd) static void pppStart(int pd) {
{
PPPDEBUG(LOG_DEBUG, ("pppStart: unit %d\n", pd)); PPPDEBUG(LOG_DEBUG, ("pppStart: unit %d\n", pd));
lcp_open(pd); /* Start protocol */ lcp_open(pd); /* Start protocol */
lcp_lowerup(pd); lcp_lowerup(pd);
@ -454,9 +462,7 @@ int ppp_init(void) {
(*protp->init)(0); (*protp->init)(0);
} }
void void pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd) {
pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd)
{
/* FIXME: the following may look stupid, but this is just an easy way /* FIXME: the following may look stupid, but this is just an easy way
* to check different auth by changing compile time option * to check different auth by changing compile time option
*/ */
@ -649,9 +655,7 @@ drop:
return; return;
} }
void void pppOverEthernetInitFailed(int pd) {
pppOverEthernetInitFailed(int pd)
{
PPPControl* pc; PPPControl* pc;
//pppHup(pd); //pppHup(pd);
@ -666,9 +670,7 @@ pppOverEthernetInitFailed(int pd)
} }
} }
static void static void pppOverEthernetLinkStatusCB(int pd, int up) {
pppOverEthernetLinkStatusCB(int pd, int up)
{
printf("pppOverEthernetLinkStatusCB: called, pd = %d, up = %d\n", pd, up); printf("pppOverEthernetLinkStatusCB: called, pd = %d, up = %d\n", pd, up);
if(up) { if(up) {
PPPDEBUG(LOG_INFO, ("pppOverEthernetLinkStatusCB: unit %d: Connecting\n", pd)); PPPDEBUG(LOG_INFO, ("pppOverEthernetLinkStatusCB: unit %d: Connecting\n", pd));
@ -680,9 +682,7 @@ pppOverEthernetLinkStatusCB(int pd, int up)
#endif #endif
#if PPPOE_SUPPORT #if PPPOE_SUPPORT
static err_t static err_t pppifOutputOverEthernet(int pd, struct pbuf *p) {
pppifOutputOverEthernet(int pd, struct pbuf *p)
{
PPPControl *pc = &pppControl[pd]; PPPControl *pc = &pppControl[pd];
struct pbuf *pb; struct pbuf *pb;
u_short protocol = PPP_IP; u_short protocol = PPP_IP;
@ -724,9 +724,7 @@ pppifOutputOverEthernet(int pd, struct pbuf *p)
#endif /* PPPOE_SUPPORT */ #endif /* PPPOE_SUPPORT */
/* Send a packet on the given connection. */ /* Send a packet on the given connection. */
static err_t static err_t pppifOutput(struct netif *netif, struct pbuf *pb, ip_addr_t *ipaddr) {
pppifOutput(struct netif *netif, struct pbuf *pb, ip_addr_t *ipaddr)
{
int pd = (int)(size_t)netif->state; int pd = (int)(size_t)netif->state;
PPPControl *pc = &pppControl[pd]; PPPControl *pc = &pppControl[pd];
#if PPPOS_SUPPORT #if PPPOS_SUPPORT
@ -877,9 +875,7 @@ pppifOutput(struct netif *netif, struct pbuf *pb, ip_addr_t *ipaddr)
/* /*
* Return the Maximum Transmission Unit for the given PPP connection. * Return the Maximum Transmission Unit for the given PPP connection.
*/ */
u_short u_short pppMTU(int pd) {
pppMTU(int pd)
{
PPPControl *pc = &pppControl[pd]; PPPControl *pc = &pppControl[pd];
u_short st; u_short st;
@ -894,9 +890,7 @@ pppMTU(int pd)
} }
#if PPPOE_SUPPORT #if PPPOE_SUPPORT
int int pppWriteOverEthernet(int pd, const u_char *s, int n) {
pppWriteOverEthernet(int pd, const u_char *s, int n)
{
PPPControl *pc = &pppControl[pd]; PPPControl *pc = &pppControl[pd];
struct pbuf *pb; struct pbuf *pb;
@ -939,9 +933,7 @@ pppWriteOverEthernet(int pd, const u_char *s, int n)
* RETURN: >= 0 Number of characters written * RETURN: >= 0 Number of characters written
* -1 Failed to write to device * -1 Failed to write to device
*/ */
int int pppWrite(int pd, const u_char *s, int n) {
pppWrite(int pd, const u_char *s, int n)
{
PPPControl *pc = &pppControl[pd]; PPPControl *pc = &pppControl[pd];
#if PPPOS_SUPPORT #if PPPOS_SUPPORT
u_char c; u_char c;
@ -1030,12 +1022,7 @@ void output (int unit, unsigned char *p, int len)
* ppp_send_config - configure the transmit-side characteristics of * ppp_send_config - configure the transmit-side characteristics of
* the ppp interface. * the ppp interface.
*/ */
int int ppp_send_config(int unit, int mtu, u_int32_t accm, int pcomp, int accomp) {
ppp_send_config(unit, mtu, accm, pcomp, accomp)
int unit, mtu;
u_int32_t accm;
int pcomp, accomp;
{
PPPControl *pc = &pppControl[unit]; PPPControl *pc = &pppControl[unit];
int i; int i;
@ -1050,18 +1037,14 @@ ppp_send_config(unit, mtu, accm, pcomp, accomp)
PPPDEBUG(LOG_INFO, ("ppp_send_config[%d]: outACCM=%X %X %X %X\n", PPPDEBUG(LOG_INFO, ("ppp_send_config[%d]: outACCM=%X %X %X %X\n",
unit, unit,
pc->outACCM[0], pc->outACCM[1], pc->outACCM[2], pc->outACCM[3])); pc->outACCM[0], pc->outACCM[1], pc->outACCM[2], pc->outACCM[3]));
return 0;
} }
/* /*
* ppp_recv_config - configure the receive-side characteristics of * ppp_recv_config - configure the receive-side characteristics of
* the ppp interface. * the ppp interface.
*/ */
int int ppp_recv_config(int unit, int mru, u_int32_t accm, int pcomp, int accomp) {
ppp_recv_config(unit, mru, accm, pcomp, accomp)
int unit, mru;
u_int32_t accm;
int pcomp, accomp;
{
PPPControl *pc = &pppControl[unit]; PPPControl *pc = &pppControl[unit];
int i; int i;
SYS_ARCH_DECL_PROTECT(lev); SYS_ARCH_DECL_PROTECT(lev);
@ -1080,17 +1063,15 @@ ppp_recv_config(unit, mru, accm, pcomp, accomp)
PPPDEBUG(LOG_INFO, ("ppp_recv_config[%d]: inACCM=%X %X %X %X\n", PPPDEBUG(LOG_INFO, ("ppp_recv_config[%d]: inACCM=%X %X %X %X\n",
unit, unit,
pc->rx.inACCM[0], pc->rx.inACCM[1], pc->rx.inACCM[2], pc->rx.inACCM[3])); pc->rx.inACCM[0], pc->rx.inACCM[1], pc->rx.inACCM[2], pc->rx.inACCM[3]));
return 0;
} }
/* /*
* sifaddr - Config the interface IP addresses and netmask. * sifaddr - Config the interface IP addresses and netmask.
*/ */
int sifaddr (int unit, u_int32_t our_adr, u_int32_t his_adr, int sifaddr (int unit, u_int32_t our_adr, u_int32_t his_adr,
u_int32_t net_mask) u_int32_t net_mask) {
{
PPPControl *pc = &pppControl[unit]; PPPControl *pc = &pppControl[unit];
int st = 1; int st = 1;
@ -1118,16 +1099,6 @@ int cifaddr (int unit, u_int32_t our_adr, u_int32_t his_adr) {
} }
/********************************************************************
*
* sifdown - Disable the indicated protocol and config the interface
* down if there are no remaining protocols.
*/
int sifdown (int u) {
/* FIXME: do the code which shutdown a PPP interface */
return 1;
}
/* /*
* pppifNetifInit - netif init callback * pppifNetifInit - netif init callback
*/ */
@ -1178,13 +1149,20 @@ int sifup(int u)
return st; return st;
} }
/********************************************************************
*
* sifdown - Disable the indicated protocol and config the interface
* down if there are no remaining protocols.
*/
int sifdown (int u) {
/* FIXME: do the code which shutdown a PPP interface */
return 1;
}
/* /*
* sifnpmode - Set the mode for handling packets for a given NP. * sifnpmode - Set the mode for handling packets for a given NP.
*/ */
int int sifnpmode(int u, int proto, enum NPmode mode) {
sifnpmode(int u, int proto, enum NPmode mode)
{
LWIP_UNUSED_ARG(u); LWIP_UNUSED_ARG(u);
LWIP_UNUSED_ARG(proto); LWIP_UNUSED_ARG(proto);
LWIP_UNUSED_ARG(mode); LWIP_UNUSED_ARG(mode);
@ -1197,6 +1175,12 @@ sifnpmode(int u, int proto, enum NPmode mode)
void netif_set_mtu(int unit, int mtu) { void netif_set_mtu(int unit, int mtu) {
/* FIXME: set lwIP MTU */ /* FIXME: set lwIP MTU */
} }
/*
* netif_get_mtu - get PPP interface MTU
*/
int netif_get_mtu(int mtu) {
/* FIXME: get lwIP MTU */
}
/******************************************************************** /********************************************************************
* *
@ -1450,3 +1434,54 @@ void new_phase(int p) {
/* The one willing notify support should add here the code to be notified of phase changes */ /* The one willing notify support should add here the code to be notified of phase changes */
#endif /* PPP_NOTIFY */ #endif /* PPP_NOTIFY */
} }
#if PPP_STATS_SUPPORT
/* ---- Note on PPP Stats support ----
*
* The one willing link stats support should add the get_ppp_stats()
* to fetch statistics from lwIP.
*/
/*
* reset_link_stats - "reset" stats when link goes up.
*/
void reset_link_stats(int u) {
if (!get_ppp_stats(u, &old_link_stats))
return;
gettimeofday(&start_time, NULL);
}
/*
* update_link_stats - get stats at link termination.
*/
void update_link_stats(int u) {
struct timeval now;
char numbuf[32];
if (!get_ppp_stats(u, &link_stats)
|| gettimeofday(&now, NULL) < 0)
return;
link_connect_time = now.tv_sec - start_time.tv_sec;
link_stats_valid = 1;
link_stats.bytes_in -= old_link_stats.bytes_in;
link_stats.bytes_out -= old_link_stats.bytes_out;
link_stats.pkts_in -= old_link_stats.pkts_in;
link_stats.pkts_out -= old_link_stats.pkts_out;
}
void print_link_stats() {
/*
* Print connect time and statistics.
*/
if (link_stats_valid) {
int t = (link_connect_time + 5) / 6; /* 1/10ths of minutes */
info("Connect time %d.%d minutes.", t/10, t%10);
info("Sent %u bytes, received %u bytes.",
link_stats.bytes_out, link_stats.bytes_in);
link_stats_valid = 0;
}
}
#endif PPP_STATS_SUPPORT

View File

@ -12,9 +12,16 @@
#include <syslog.h> /* FIXME: temporary */ #include <syslog.h> /* FIXME: temporary */
#include "lwip/netif.h" #include "lwip/netif.h"
#include "lwip/def.h" #include "lwip/def.h"
#ifndef bool
typedef unsigned char bool;
#endif
/************************* /*************************
*** PUBLIC DEFINITIONS *** *** PUBLIC DEFINITIONS ***
*************************/ *************************/
@ -38,6 +45,17 @@ struct ppp_addrs {
ip_addr_t our_ipaddr, his_ipaddr, netmask, dns1, dns2; ip_addr_t our_ipaddr, his_ipaddr, netmask, dns1, dns2;
}; };
#if PPP_STATS_SUPPORT
/*
* PPP statistics structure
*/
struct pppd_stats {
unsigned int bytes_in;
unsigned int bytes_out;
unsigned int pkts_in;
unsigned int pkts_out;
};
#endif /* PPP_STATS_SUPPORT */
/* FIXME: use PPP option instead ? */ /* FIXME: use PPP option instead ? */
@ -121,6 +139,14 @@ enum pppAuthType {
#endif /* CHAP_SUPPORT */ #endif /* CHAP_SUPPORT */
}; };
struct pbuf * pppSingleBuf(struct pbuf *p);
static void pppStart(int pd);
static void ppp_input(void *arg);
int ppp_init(void);
void pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd); void pppSetAuth(enum pppAuthType authType, const char *user, const char *passwd);
/* Link status callback function prototype */ /* Link status callback function prototype */
@ -132,8 +158,56 @@ typedef void (*pppLinkStatusCB_fn)(void *ctx, int errCode, void *arg);
int pppOverEthernetOpen(struct netif *ethif, const char *service_name, const char *concentrator_name, int pppOverEthernetOpen(struct netif *ethif, const char *service_name, const char *concentrator_name,
pppLinkStatusCB_fn linkStatusCB, void *linkStatusCtx); pppLinkStatusCB_fn linkStatusCB, void *linkStatusCtx);
void pppInProcOverEthernet(int pd, struct pbuf *pb); void pppInProcOverEthernet(int pd, struct pbuf *pb);
void pppOverEthernetInitFailed(int pd);
static void pppOverEthernetLinkStatusCB(int pd, int up);
static err_t pppifOutputOverEthernet(int pd, struct pbuf *p);
static err_t pppifOutput(struct netif *netif, struct pbuf *pb, ip_addr_t *ipaddr);
u_short pppMTU(int pd);
int pppWriteOverEthernet(int pd, const u_char *s, int n);
int pppWrite(int pd, const u_char *s, int n);
void pppInProcOverEthernet(int pd, struct pbuf *pb);
void output (int unit, unsigned char *p, int len);
int ppp_send_config(int unit, int mtu, u_int32_t accm, int pcomp, int accomp);
int ppp_recv_config(int unit, int mru, u_int32_t accm, int pcomp, int accomp);
int sifaddr(int unit, u_int32_t our_adr, u_int32_t his_adr, u_int32_t net_mask);
int cifaddr(int unit, u_int32_t our_adr, u_int32_t his_adr);
static err_t pppifNetifInit(struct netif *netif);
int sifup(int u);
int sifdown (int u);
int sifnpmode(int u, int proto, enum NPmode mode);
void netif_set_mtu(int unit, int mtu);
int netif_get_mtu(int mtu);
int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway, bool replace);
int cifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway);
int sifproxyarp (int unit, u_int32_t his_adr);
int cifproxyarp (int unit, u_int32_t his_adr);
int sifvjcomp (int u, int vjcomp, int cidcomp, int maxcid);
int get_idle_time(int u, struct ppp_idle *ip);
int get_loop_output(void);
u_int32_t GetMask (u_int32_t addr);
#if PPP_PROTOCOLNAME #if PPP_PROTOCOLNAME
const char * protocol_name(int proto); const char * protocol_name(int proto);
@ -141,4 +215,10 @@ const char * protocol_name(int proto);
void new_phase(int p); void new_phase(int p);
#if PPP_STATS_SUPPORT
void print_link_stats(void); /* Print stats, if available */
void reset_link_stats(int u); /* Reset (init) stats when link goes up */
void update_link_stats(int u); /* Get stats at link termination */
#endif /* PPP_STATS_SUPPORT */
#endif /* PPPMY_H_ */ #endif /* PPPMY_H_ */