Print this page
7819 IPv6 Packet and MTU bug

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/inet/ip/ip6_output.c
          +++ new/usr/src/uts/common/inet/ip/ip6_output.c
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
       25 + * Copyright 2017 OmniTI Computer Consulting, Inc. All rights reserved.
  25   26   */
  26   27  /* Copyright (c) 1990 Mentat Inc. */
  27   28  
  28   29  #include <sys/types.h>
  29   30  #include <sys/stream.h>
  30   31  #include <sys/strsubr.h>
  31   32  #include <sys/dlpi.h>
  32   33  #include <sys/strsun.h>
  33   34  #include <sys/zone.h>
  34   35  #include <sys/ddi.h>
↓ open down ↓ 203 lines elided ↑ open up ↑
 238  239                   * To avoid a periodic timer to increase the path MTU we
 239  240                   * look at dce_last_change_time each time we send a packet.
 240  241                   */
 241  242                  now = ddi_get_lbolt64();
 242  243                  if (TICK_TO_SEC(now) - dce->dce_last_change_time >
 243  244                      ipst->ips_ip_pathmtu_interval) {
 244  245                          /*
 245  246                           * Older than 20 minutes. Drop the path MTU information.
 246  247                           */
 247  248                          mutex_enter(&dce->dce_lock);
 248      -                        dce->dce_flags &= ~(DCEF_PMTU|DCEF_TOO_SMALL_PMTU);
      249 +                        dce->dce_flags &= ~DCEF_PMTU;
 249  250                          dce->dce_last_change_time = TICK_TO_SEC(now);
 250  251                          mutex_exit(&dce->dce_lock);
 251  252                          dce_increment_generation(dce);
 252  253                          ixa->ixa_fragsize = ip_get_base_mtu(nce->nce_ill, ire);
 253  254                  } else {
 254  255                          uint_t fragsize;
 255  256  
 256  257                          fragsize = ip_get_base_mtu(nce->nce_ill, ire);
 257  258                          if (fragsize > dce->dce_pmtu)
 258  259                                  fragsize = dce->dce_pmtu;
↓ open down ↓ 1059 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX