OpenBSD 内核 PPPoE 补丁

2009-05-13 01:25:53来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  前段时间用新装的OpenBSD(3.7 Stable)做家里的NAT,使用Kernel Mode 的 PPPoE连接到电信的ADSL,结果系统在大流量的时候内核会crash,经过几天的调裕?沼谡业搅薆ug 所在,现在问题已经解决,并且工作非常良好。
  前段时间用新装的OpenBSD(3.7 Stable)做家里的NAT,使用Kernel Mode 的 PPPoE连接到电信的ADSL,结果系统在大流量的时候内核会crash,经过几天的调裕?沼谡业搅薆ug 所在,现在问题已经解决,并且工作非常良好。
这是crash时的信息:
uvm_fault(0xd0291580, 0xdee80000, 0, 1) -> e
kernel: page fault trap, code = 0
stopped at bcopy+0x1a: repe movsl (%esi), %es:(%edi)
ddb>
经过长时间的调试找到问题是出在/sys/net/if_spppsubr.c中,相关的代码如下:
sppp_input(struct ifnet *ifp,struct mbuf *m) 中的
      struct ppp_header *h, ht;
      if (sp->pp_flags & PP_NOFRAMING) {
              memcpy(&ht.protocol, mtod(m, void *), 2);
              m_adj(m, 2);
              ht.control = PPP_UI;
              ht.address = PPP_ALLSTATIONS;
              h = &ht;
      } else {
              /* Get PPP header. */
              h = mtod (m, struct ppp_header*);
              m_adj (m, PPP_HEADER_LEN);
      }
      .....
              switch (ntohs (h->protocol)) {
              default:
                      if (sp->state[IDX_LCP] == STATE_OPENED)
                              sppp_cp_send (sp, PPP_LCP, PROTO_REJ,
                                      ++sp->pp_seq, m->m_pkthdr.len + 2,
                                      &h->protocol);

  在 sppp_cp_send 函数中有一个 bcopy 调用:
      if (len)
              bcopy (data, lh+1, len);

  当 (sp->pp_flags & PP_NOFRAMING) 为真时, *h 将指向 ht (即结构

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:apache压缩技术与配置

下一篇:高速Unix/Linux下载:ftp://219.139.108.138/