diff -urNp mpd3-cvs/src/pppoe.c mpd3-cvs-pppoe/src/pppoe.c --- mpd3-cvs/src/pppoe.c Mon Nov 8 01:11:44 2004 +++ mpd3-cvs-pppoe/src/pppoe.c Wed May 24 12:08:15 2006 @@ -43,6 +43,8 @@ #define MAX_PATH 64 /* XXX should be NG_PATHLEN */ #define MAX_SESSION 64 /* max length of PPPoE session name */ +#define MAX_IFACES 100 /* XXX boco - hardcoded */ + /* Per link private info */ struct pppoeinfo { int state; /* link layer state */ @@ -162,7 +164,7 @@ struct PppoeIf { EventRef ctrlEvent; /* listen for ctrl messages */ }; int PppoeIfCount=0; -struct PppoeIf PppoeIfs[64]; +struct PppoeIf PppoeIfs[MAX_IFACES]; int PppoeListenUpdateSheduled=0; struct pppTimer PppoeListenUpdateTimer; @@ -889,14 +891,19 @@ PppoeNodeUpdate(void) j=i; }; if (j==-1) { - if (CreatePppoeNode(p->path,p->hook)) { - snprintf(PppoeIfs[PppoeIfCount].ifnodepath,sizeof(PppoeIfs[PppoeIfCount].ifnodepath),"%s",p->path); - snprintf(PppoeIfs[PppoeIfCount].session,sizeof(PppoeIfs[PppoeIfCount].session),"%s",p->session); - PppoeIfs[PppoeIfCount++].listen=0; - } else { - Log(LG_ERR, ("[%s] Error in creation ng_pppoe node on %s", lnk->name, p->path)); - return; - }; + if (PppoeIfCount < MAX_IFACES) { + if (CreatePppoeNode(p->path,p->hook)) { + snprintf(PppoeIfs[PppoeIfCount].ifnodepath,sizeof(PppoeIfs[PppoeIfCount].ifnodepath),"%s",p->path); + snprintf(PppoeIfs[PppoeIfCount].session,sizeof(PppoeIfs[PppoeIfCount].session),"%s",p->session); + PppoeIfs[PppoeIfCount++].listen=0; + } else { + Log(LG_ERR, ("[%s] Error in creation ng_pppoe node on %s", lnk->name, p->path)); + return; + } + } else { + Log(LG_ERR, ("[%s] Error in creation ng_pppoe node on %s, MAX_IFACES reached", lnk->name, p->path)); + continue; + } }; if (Enabled(&p->options, PPPOE_CONF_INCOMING)&&(!PppoeListenUpdateSheduled)) { /* Set a timer to run PppoeListenUpdate */ @@ -938,12 +945,17 @@ PppoeListenUpdate(void *arg) j=i; }; if (j==-1) { - if (ListenPppoeNode(p->path,p->hook,&(PppoeIfs[PppoeIfCount]),p->session)) { - snprintf(PppoeIfs[PppoeIfCount].ifnodepath,sizeof(PppoeIfs[PppoeIfCount].ifnodepath),"%s",p->path); - snprintf(PppoeIfs[PppoeIfCount].session,sizeof(PppoeIfs[PppoeIfCount].session),"%s",p->session); - PppoeIfs[PppoeIfCount].listen=1; - PppoeIfCount++; - }; + if (PppoeIfCount < MAX_IFACES) { + if (ListenPppoeNode(p->path,p->hook,&(PppoeIfs[PppoeIfCount]),p->session)) { + snprintf(PppoeIfs[PppoeIfCount].ifnodepath,sizeof(PppoeIfs[PppoeIfCount].ifnodepath),"%s",p->path); + snprintf(PppoeIfs[PppoeIfCount].session,sizeof(PppoeIfs[PppoeIfCount].session),"%s",p->session); + PppoeIfs[PppoeIfCount].listen=1; + PppoeIfCount++; + } + } else { + Log(LG_ERR, ("[%s] Error in creation ng_pppoe node on %s, MAX_IFACES reached", lnk->name, p->path)); + continue; + } } else { if ((PppoeIfs[j].listen==0)&&(ListenPppoeNode(p->path,p->hook,&(PppoeIfs[j]),p->session))) { PppoeIfs[j].listen=1;