[BACK]Return to ip6_input.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / netinet6

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/netinet6/ip6_input.c between version 1.64.2.4 and 1.65

version 1.64.2.4, 2004/11/29 07:25:04 version 1.65, 2003/08/07 16:33:26
Line 116  __KERNEL_RCSID(0, "$NetBSD$");
Line 116  __KERNEL_RCSID(0, "$NetBSD$");
 #include "loop.h"  #include "loop.h"
 #include "faith.h"  #include "faith.h"
 #include "gif.h"  #include "gif.h"
   #include "bpfilter.h"
   
 #if NGIF > 0  #if NGIF > 0
 #include <netinet6/in6_gif.h>  #include <netinet6/in6_gif.h>
Line 169  ip6_init()
Line 170  ip6_init()
         ip6intrq.ifq_maxlen = ip6qmaxlen;          ip6intrq.ifq_maxlen = ip6qmaxlen;
         nd6_init();          nd6_init();
         frag6_init();          frag6_init();
           ip6_flow_seq = arc4random();
   
         ip6_init2((void *)0);          ip6_init2((void *)0);
   
Line 465  ip6_input(m)
Line 467  ip6_input(m)
         if (ip6_forward_rt.ro_rt != NULL &&          if (ip6_forward_rt.ro_rt != NULL &&
             (ip6_forward_rt.ro_rt->rt_flags & RTF_UP) != 0 &&              (ip6_forward_rt.ro_rt->rt_flags & RTF_UP) != 0 &&
             IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst,              IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst,
             &((struct sockaddr_in6 *)(&ip6_forward_rt.ro_dst))->sin6_addr))                                 &((struct sockaddr_in6 *)(&ip6_forward_rt.ro_dst))->sin6_addr))
                 ip6stat.ip6s_forward_cachehit++;                  ip6stat.ip6s_forward_cachehit++;
         else {          else {
                 struct sockaddr_in6 *dst6;                  struct sockaddr_in6 *dst6;
Line 540  ip6_input(m)
Line 542  ip6_input(m)
          */           */
 #if defined(NFAITH) && 0 < NFAITH  #if defined(NFAITH) && 0 < NFAITH
         if (ip6_keepfaith) {          if (ip6_keepfaith) {
                 if (ip6_forward_rt.ro_rt && ip6_forward_rt.ro_rt->rt_ifp &&                  if (ip6_forward_rt.ro_rt && ip6_forward_rt.ro_rt->rt_ifp
                     ip6_forward_rt.ro_rt->rt_ifp->if_type == IFT_FAITH) {                   && ip6_forward_rt.ro_rt->rt_ifp->if_type == IFT_FAITH) {
                         /* XXX do we need more sanity checks? */                          /* XXX do we need more sanity checks? */
                         ours = 1;                          ours = 1;
                         deliverifp = ip6_forward_rt.ro_rt->rt_ifp; /* faith */                          deliverifp = ip6_forward_rt.ro_rt->rt_ifp; /* faith */
Line 769  ip6_hopopts_input(plenp, rtalertp, mp, o
Line 771  ip6_hopopts_input(plenp, rtalertp, mp, o
         struct mbuf *m = *mp;          struct mbuf *m = *mp;
         int off = *offp, hbhlen;          int off = *offp, hbhlen;
         struct ip6_hbh *hbh;          struct ip6_hbh *hbh;
           u_int8_t *opt;
   
         /* validation of the length of the header */          /* validation of the length of the header */
         IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m,          IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m,
Line 787  ip6_hopopts_input(plenp, rtalertp, mp, o
Line 790  ip6_hopopts_input(plenp, rtalertp, mp, o
         KASSERT(IP6_HDR_ALIGNED_P(hbh));          KASSERT(IP6_HDR_ALIGNED_P(hbh));
         off += hbhlen;          off += hbhlen;
         hbhlen -= sizeof(struct ip6_hbh);          hbhlen -= sizeof(struct ip6_hbh);
           opt = (u_int8_t *)hbh + sizeof(struct ip6_hbh);
   
         if (ip6_process_hopopts(m, (u_int8_t *)hbh + sizeof(struct ip6_hbh),          if (ip6_process_hopopts(m, (u_int8_t *)hbh + sizeof(struct ip6_hbh),
                                 hbhlen, rtalertp, plenp) < 0)                                  hbhlen, rtalertp, plenp) < 0)
Line 996  ip6_savecontrol(in6p, mp, ip6, m)
Line 1000  ip6_savecontrol(in6p, mp, ip6, m)
         struct ip6_hdr *ip6;          struct ip6_hdr *ip6;
         struct mbuf *m;          struct mbuf *m;
 {  {
           struct proc *p = curproc;       /* XXX */
           int privileged;
   
           privileged = 0;
           if (p && !suser(p->p_ucred, &p->p_acflag))
                   privileged++;
   
 #ifdef SO_TIMESTAMP  #ifdef SO_TIMESTAMP
         if (in6p->in6p_socket->so_options & SO_TIMESTAMP) {          if (in6p->in6p_socket->so_options & SO_TIMESTAMP) {
Line 1048  ip6_savecontrol(in6p, mp, ip6, m)
Line 1058  ip6_savecontrol(in6p, mp, ip6, m)
         /* IN6P_NEXTHOP - for outgoing packet only */          /* IN6P_NEXTHOP - for outgoing packet only */
   
         /*          /*
          * IPV6_HOPOPTS socket option.  Recall that we required super-user           * IPV6_HOPOPTS socket option. We require super-user privilege
          * privilege for the option (see ip6_ctloutput), but it might be too           * for the option, but it might be too strict, since there might
          * strict, since there might be some hop-by-hop options which can be           * be some hop-by-hop options which can be returned to normal user.
          * returned to normal user.           * See RFC 2292 section 6.
          * See also RFC 2292 section 6.  
          */           */
         if ((in6p->in6p_flags & IN6P_HOPOPTS) != 0) {          if ((in6p->in6p_flags & IN6P_HOPOPTS) != 0 && privileged) {
                 /*                  /*
                  * Check if a hop-by-hop options header is contatined in the                   * Check if a hop-by-hop options header is contatined in the
                  * received packet, and if so, store the options as ancillary                   * received packet, and if so, store the options as ancillary
Line 1149  ip6_savecontrol(in6p, mp, ip6, m)
Line 1158  ip6_savecontrol(in6p, mp, ip6, m)
                                 if (!in6p->in6p_flags & IN6P_DSTOPTS)                                  if (!in6p->in6p_flags & IN6P_DSTOPTS)
                                         break;                                          break;
   
                                   /*
                                    * We also require super-user privilege for
                                    * the option.
                                    * See the comments on IN6_HOPOPTS.
                                    */
                                   if (!privileged)
                                           break;
   
                                 *mp = sbcreatecontrol((caddr_t)ip6e, elen,                                  *mp = sbcreatecontrol((caddr_t)ip6e, elen,
                                     IPV6_DSTOPTS, IPPROTO_IPV6);                                      IPV6_DSTOPTS, IPPROTO_IPV6);
                                 if (*mp)                                  if (*mp)
Line 1335  ip6_nexthdr(m, off, proto, nxtp)
Line 1352  ip6_nexthdr(m, off, proto, nxtp)
                 if (m->m_pkthdr.len < off + sizeof(fh))                  if (m->m_pkthdr.len < off + sizeof(fh))
                         return -1;                          return -1;
                 m_copydata(m, off, sizeof(fh), (caddr_t)&fh);                  m_copydata(m, off, sizeof(fh), (caddr_t)&fh);
                 if ((fh.ip6f_offlg & IP6F_OFF_MASK) != 0)                  if ((ntohs(fh.ip6f_offlg) & IP6F_OFF_MASK) != 0)
                         return -1;                          return -1;
                 if (nxtp)                  if (nxtp)
                         *nxtp = fh.ip6f_nxt;                          *nxtp = fh.ip6f_nxt;
Line 1421  u_char inet6ctlerrmap[PRC_NCMDS] = {
Line 1438  u_char inet6ctlerrmap[PRC_NCMDS] = {
         ENOPROTOOPT          ENOPROTOOPT
 };  };
   
 SYSCTL_SETUP(sysctl_net_inet6_ip6_setup, "sysctl net.inet6.ip6 subtree setup")  int
   ip6_sysctl(name, namelen, oldp, oldlenp, newp, newlen)
           int *name;
           u_int namelen;
           void *oldp;
           size_t *oldlenp;
           void *newp;
           size_t newlen;
 {  {
           int old, error;
   
         sysctl_createv(clog, 0, NULL, NULL,          /* All sysctl names at this level are terminal. */
                        CTLFLAG_PERMANENT,          if (namelen != 1)
                        CTLTYPE_NODE, "net", NULL,                  return ENOTDIR;
                        NULL, 0, NULL, 0,  
                        CTL_NET, CTL_EOL);          switch (name[0]) {
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT,          case IPV6CTL_FORWARDING:
                        CTLTYPE_NODE, "inet6",                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        SYSCTL_DESCR("PF_INET6 related settings"),                                    &ip6_forwarding);
                        NULL, 0, NULL, 0,          case IPV6CTL_SENDREDIRECTS:
                        CTL_NET, PF_INET6, CTL_EOL);                  return sysctl_int(oldp, oldlenp, newp, newlen,
         sysctl_createv(clog, 0, NULL, NULL,                                  &ip6_sendredirects);
                        CTLFLAG_PERMANENT,          case IPV6CTL_DEFHLIM:
                        CTLTYPE_NODE, "ip6",                  return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_defhlim);
                        SYSCTL_DESCR("IPv6 related settings"),          case IPV6CTL_MAXFRAGPACKETS:
                        NULL, 0, NULL, 0,                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        CTL_NET, PF_INET6, IPPROTO_IPV6, CTL_EOL);                                  &ip6_maxfragpackets);
           case IPV6CTL_ACCEPT_RTADV:
         sysctl_createv(clog, 0, NULL, NULL,                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,                                  &ip6_accept_rtadv);
                        CTLTYPE_INT, "forwarding",          case IPV6CTL_KEEPFAITH:
                        SYSCTL_DESCR("Enable forwarding of INET6 datagrams"),                  return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_keepfaith);
                        NULL, 0, &ip6_forwarding, 0,          case IPV6CTL_LOG_INTERVAL:
                        CTL_NET, PF_INET6, IPPROTO_IPV6,                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        IPV6CTL_FORWARDING, CTL_EOL);                                  &ip6_log_interval);
         sysctl_createv(clog, 0, NULL, NULL,          case IPV6CTL_HDRNESTLIMIT:
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        CTLTYPE_INT, "redirect",                                  &ip6_hdrnestlimit);
                        SYSCTL_DESCR("Enable sending of ICMPv6 redirect messages"),          case IPV6CTL_DAD_COUNT:
                        NULL, 0, &ip6_sendredirects, 0,                  return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_dad_count);
                        CTL_NET, PF_INET6, IPPROTO_IPV6,          case IPV6CTL_AUTO_FLOWLABEL:
                        IPV6CTL_SENDREDIRECTS, CTL_EOL);                  return sysctl_int(oldp, oldlenp, newp, newlen,
         sysctl_createv(clog, 0, NULL, NULL,                                  &ip6_auto_flowlabel);
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,          case IPV6CTL_DEFMCASTHLIM:
                        CTLTYPE_INT, "hlim",                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        SYSCTL_DESCR("Hop limit for an INET6 datagram"),                                  &ip6_defmcasthlim);
                        NULL, 0, &ip6_defhlim, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_DEFHLIM, CTL_EOL);  
 #ifdef notyet  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "mtu", NULL,  
                        NULL, 0, &, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_DEFMTU, CTL_EOL);  
 #endif  
 #ifdef __no_idea__  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "forwsrcrt", NULL,  
                        NULL, 0, &?, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_FORWSRCRT, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_STRUCT, "stats", NULL,  
                        NULL, 0, &?, sizeof(?),  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_STATS, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_STRUCT, "mrtstats", NULL,  
                        NULL, 0, &?, sizeof(?),  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_MRTSTATS, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_?, "mrtproto", NULL,  
                        NULL, 0, &?, sizeof(?),  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_MRTPROTO, CTL_EOL);  
 #endif  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "maxfragpackets",  
                        SYSCTL_DESCR("Maximum number of fragments to buffer "  
                                     "for reassembly"),  
                        NULL, 0, &ip6_maxfragpackets, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_MAXFRAGPACKETS, CTL_EOL);  
 #ifdef __no_idea__  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "sourcecheck", NULL,  
                        NULL, 0, &?, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_SOURCECHECK, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "sourcecheck_logint", NULL,  
                        NULL, 0, &?, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_SOURCECHECK_LOGINT, CTL_EOL);  
 #endif  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "accept_rtadv",  
                        SYSCTL_DESCR("Accept router advertisements"),  
                        NULL, 0, &ip6_accept_rtadv, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_ACCEPT_RTADV, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "keepfaith",  
                        SYSCTL_DESCR("Activate faith interface"),  
                        NULL, 0, &ip6_keepfaith, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_KEEPFAITH, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "log_interval",  
                        SYSCTL_DESCR("Minumum interval between logging "  
                                     "unroutable packets"),  
                        NULL, 0, &ip6_log_interval, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_LOG_INTERVAL, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "hdrnestlimit",  
                        SYSCTL_DESCR("Maximum number of nested IPv6 headers"),  
                        NULL, 0, &ip6_hdrnestlimit, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_HDRNESTLIMIT, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "dad_count",  
                        SYSCTL_DESCR("Number of Duplicate Address Detection "  
                                     "probes to send"),  
                        NULL, 0, &ip6_dad_count, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_DAD_COUNT, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "auto_flowlabel",  
                        SYSCTL_DESCR("Assign random IPv6 flow labels"),  
                        NULL, 0, &ip6_auto_flowlabel, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_AUTO_FLOWLABEL, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "defmcasthlim",  
                        SYSCTL_DESCR("Default multicast hop limit"),  
                        NULL, 0, &ip6_defmcasthlim, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_DEFMCASTHLIM, CTL_EOL);  
 #if NGIF > 0  #if NGIF > 0
         sysctl_createv(clog, 0, NULL, NULL,          case IPV6CTL_GIF_HLIM:
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,                  return sysctl_int(oldp, oldlenp, newp, newlen,
                        CTLTYPE_INT, "gifhlim",                                  &ip6_gif_hlim);
                        SYSCTL_DESCR("Default hop limit for a gif tunnel datagram"),  #endif
                        NULL, 0, &ip6_gif_hlim, 0,          case IPV6CTL_KAME_VERSION:
                        CTL_NET, PF_INET6, IPPROTO_IPV6,                  return sysctl_rdstring(oldp, oldlenp, newp, __KAME_VERSION);
                        IPV6CTL_GIF_HLIM, CTL_EOL);          case IPV6CTL_USE_DEPRECATED:
 #endif /* NGIF */                  return sysctl_int(oldp, oldlenp, newp, newlen,
         sysctl_createv(clog, 0, NULL, NULL,                                  &ip6_use_deprecated);
                        CTLFLAG_PERMANENT,          case IPV6CTL_RR_PRUNE:
                        CTLTYPE_STRING, "kame_version",                  return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_rr_prune);
                        SYSCTL_DESCR("KAME Version"),          case IPV6CTL_V6ONLY:
                        NULL, 0, __KAME_VERSION, 0,  #ifdef INET6_BINDV6ONLY
                        CTL_NET, PF_INET6, IPPROTO_IPV6,                  return sysctl_rdint(oldp, oldlenp, newp, ip6_v6only);
                        IPV6CTL_KAME_VERSION, CTL_EOL);  #else
         sysctl_createv(clog, 0, NULL, NULL,                  return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_v6only);
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  #endif
                        CTLTYPE_INT, "use_deprecated",          case IPV6CTL_ANONPORTMIN:
                        SYSCTL_DESCR("Allow use of deprecated addresses as "                  old = ip6_anonportmin;
                                     "source addresses"),                  error = sysctl_int(oldp, oldlenp, newp, newlen,
                        NULL, 0, &ip6_use_deprecated, 0,                      &ip6_anonportmin);
                        CTL_NET, PF_INET6, IPPROTO_IPV6,                  if (ip6_anonportmin >= ip6_anonportmax || ip6_anonportmin < 0 ||
                        IPV6CTL_USE_DEPRECATED, CTL_EOL);                      ip6_anonportmin > 65535
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "rr_prune", NULL,  
                        NULL, 0, &ip6_rr_prune, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_RR_PRUNE, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT  
 #ifndef INET6_BINDV6ONLY  
                        |CTLFLAG_READWRITE,  
 #endif  
                        CTLTYPE_INT, "v6only",  
                        SYSCTL_DESCR("Disallow PF_INET6 sockets from connecting "  
                                     "to PF_INET sockets"),  
                        NULL, 0, &ip6_v6only, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_V6ONLY, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "anonportmin",  
                        SYSCTL_DESCR("Lowest ephemeral port number to assign"),  
                        sysctl_net_inet_ip_ports, 0, &ip6_anonportmin, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_ANONPORTMIN, CTL_EOL);  
         sysctl_createv(clog, 0, NULL, NULL,  
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  
                        CTLTYPE_INT, "anonportmax",  
                        SYSCTL_DESCR("Highest ephemeral port number to assign"),  
                        sysctl_net_inet_ip_ports, 0, &ip6_anonportmax, 0,  
                        CTL_NET, PF_INET6, IPPROTO_IPV6,  
                        IPV6CTL_ANONPORTMAX, CTL_EOL);  
 #ifndef IPNOPRIVPORTS  #ifndef IPNOPRIVPORTS
         sysctl_createv(clog, 0, NULL, NULL,                      || ip6_anonportmin < IPV6PORT_RESERVED
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,  #endif
                        CTLTYPE_INT, "lowportmin",                      ) {
                        SYSCTL_DESCR("Lowest privileged ephemeral port number "                          ip6_anonportmin = old;
                                     "to assign"),                          return (EINVAL);
                        sysctl_net_inet_ip_ports, 0, &ip6_lowportmin, 0,                  }
                        CTL_NET, PF_INET6, IPPROTO_IPV6,                  return (error);
                        IPV6CTL_LOWPORTMIN, CTL_EOL);          case IPV6CTL_ANONPORTMAX:
         sysctl_createv(clog, 0, NULL, NULL,                  old = ip6_anonportmax;
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,                  error = sysctl_int(oldp, oldlenp, newp, newlen,
                        CTLTYPE_INT, "lowportmax",                      &ip6_anonportmax);
                        SYSCTL_DESCR("Highest privileged ephemeral port number "                  if (ip6_anonportmin >= ip6_anonportmax || ip6_anonportmax < 0 ||
                                     "to assign"),                      ip6_anonportmax > 65535
                        sysctl_net_inet_ip_ports, 0, &ip6_lowportmax, 0,  #ifndef IPNOPRIVPORTS
                        CTL_NET, PF_INET6, IPPROTO_IPV6,                      || ip6_anonportmax < IPV6PORT_RESERVED
                        IPV6CTL_LOWPORTMAX, CTL_EOL);  #endif
 #endif /* IPNOPRIVPORTS */                      ) {
         sysctl_createv(clog, 0, NULL, NULL,                          ip6_anonportmax = old;
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,                          return (EINVAL);
                        CTLTYPE_INT, "maxfrags",                  }
                        SYSCTL_DESCR("Maximum fragments in reassembly queue"),                  return (error);
                        NULL, 0, &ip6_maxfrags, 0,  #ifndef IPNOPRIVPORTS
                        CTL_NET, PF_INET6, IPPROTO_IPV6,          case IPV6CTL_LOWPORTMIN:
                        IPV6CTL_MAXFRAGS, CTL_EOL);                  old = ip6_lowportmin;
                   error = sysctl_int(oldp, oldlenp, newp, newlen,
                       &ip6_lowportmin);
                   if (ip6_lowportmin >= ip6_lowportmax ||
                       ip6_lowportmin > IPV6PORT_RESERVEDMAX ||
                       ip6_lowportmin < IPV6PORT_RESERVEDMIN) {
                           ip6_lowportmin = old;
                           return (EINVAL);
                   }
                   return (error);
           case IPV6CTL_LOWPORTMAX:
                   old = ip6_lowportmax;
                   error = sysctl_int(oldp, oldlenp, newp, newlen,
                       &ip6_lowportmax);
                   if (ip6_lowportmin >= ip6_lowportmax ||
                       ip6_lowportmax > IPV6PORT_RESERVEDMAX ||
                       ip6_lowportmax < IPV6PORT_RESERVEDMIN) {
                           ip6_lowportmax = old;
                           return (EINVAL);
                   }
                   return (error);
   #endif
           case IPV6CTL_MAXFRAGS:
                   return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_maxfrags);
           default:
                   return EOPNOTSUPP;
           }
           /* NOTREACHED */
 }  }

Legend:
Removed from v.1.64.2.4  
changed lines
  Added in v.1.65

CVSweb <webmaster@jp.NetBSD.org>