pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/33926 (rp-pppoe report asyncReadFromPPP error on NetBSD-3.0)



The following reply was made to PR pkg/33926; it has been noted by GNATS.

From: Martin Husemann <martin%duskware.de@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: pkg/33926 (rp-pppoe report asyncReadFromPPP error on NetBSD-3.0)
Date: Sat, 5 Aug 2006 16:12:43 +0200

 --RASg3xLB4tUQ4RcS
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 The package seems broken in multiple ways. The patches patch-ac and
 patch-ad (both noops and unecessary) should be removed.
 
 The patch below fixes the obvious EINVAL problem reported in this PR, but
 it does not make the package work - to me it seems after restructuring
 rp-pppoe completely there has been no testing on OSes using BPF.
 
 If noone volunteers to debug the package all way through we should either
 mark it broken or consider downgrading it.
 
 Martin
 
 --RASg3xLB4tUQ4RcS
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename=patch-ah
 
 --- src/ppp.c.orig     2002-07-08 16:38:24.000000000 +0200
 +++ src/ppp.c  2006-08-05 15:49:46.000000000 +0200
 @@ -164,13 +164,27 @@
  void
  asyncReadFromPPP(PPPoEConnection *conn, PPPoEPacket *packet)
  {
 -    unsigned char buf[READ_CHUNK];
 -    unsigned char *ptr = buf;
 +    unsigned char *ptr;
      unsigned char c;
 +    extern int bpfLength;
 +    static int readLength = 0;
 +    unsigned char *buf = NULL;
  
      int r;
  
 -    r = read(0, buf, READ_CHUNK);
 +    if (readLength == 0) {
 +      /*
 +       * We need to read everything from BPF in the size the kernel
 +       * told us (bpfLength), if we are using BPF.
 +       * Otherwise just use READ_CHUNK.
 +       */
 +      if (bpfLength == 0)
 +          readLength = READ_CHUNK;
 +      else
 +          readLength = bpfLength;
 +    }
 +    ptr = buf = malloc(readLength);
 +    r = read(0, buf, readLength);
      if (r < 0) {
        fatalSys("read (asyncReadFromPPP)");
      }
 @@ -193,7 +207,7 @@
        }
  
        /* Still waiting... */
 -      if (PPPState == STATE_WAITFOR_FRAME_ADDR) return;
 +      if (PPPState == STATE_WAITFOR_FRAME_ADDR) goto done;
  
        while(r && PPPState == STATE_DROP_PROTO) {
            --r;
 @@ -202,7 +216,7 @@
            }
        }
  
 -      if (PPPState == STATE_DROP_PROTO) return;
 +      if (PPPState == STATE_DROP_PROTO) goto done;
  
        /* Start building frame */
        while(r && PPPState == STATE_BUILDING_PACKET) {
 @@ -234,6 +248,8 @@
            }
        }
      }
 +done:
 +    free(buf);
  }
  
  /**********************************************************************
 
 --RASg3xLB4tUQ4RcS--
 



Home | Main Index | Thread Index | Old Index