Print this page
OS-4699 lxbrand netty complains about SO_LINGER (really IP_TOS)
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-4018 lxbrand support TCP SO_REUSEPORT
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Cody Mello <cody.mello@joyent.com>
        
*** 19,28 ****
--- 19,29 ----
   * CDDL HEADER END
   */
  
  /*
   * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
+  * Copyright 2016 Joyent, Inc.
   */
  /* Copyright (c) 1990 Mentat Inc. */
  
  #include <sys/types.h>
  #include <sys/stream.h>
*** 617,626 ****
--- 618,630 ----
                          *i1 = connp->conn_oobinline ? SO_OOBINLINE : 0;
                          break;
                  case SO_REUSEADDR:
                          *i1 = connp->conn_reuseaddr ? SO_REUSEADDR : 0;
                          break;  /* goto sizeof (int) option return */
+                 case SO_REUSEPORT:
+                         *i1 = connp->conn_reuseport;
+                         break;  /* goto sizeof (int) option return */
                  case SO_TYPE:
                          *i1 = connp->conn_so_type;
                          break;  /* goto sizeof (int) option return */
                  case SO_DONTROUTE:
                          *i1 = (ixa->ixa_flags & IXAF_DONTROUTE) ?
*** 1184,1195 ****
          zoneid_t        zoneid = IPCL_ZONEID(connp);
          ipif_t          *ipif;
          ip_stack_t      *ipst = connp->conn_netstack->netstack_ip;
          int             error;
  
!         if (connp->conn_family != AF_INET)
                  return (EINVAL);
  
          switch (name) {
          case IP_TTL:
                  /* Don't allow zero */
                  if (*i1 < 1 || *i1 > 255)
--- 1188,1215 ----
          zoneid_t        zoneid = IPCL_ZONEID(connp);
          ipif_t          *ipif;
          ip_stack_t      *ipst = connp->conn_netstack->netstack_ip;
          int             error;
  
!         if (connp->conn_family == AF_INET6 &&
!             connp->conn_ipversion == IPV4_VERSION) {
!                 /*
!                  * Allow certain IPv4 options to be set on an AF_INET6 socket
!                  * if the connection is still IPv4.
!                  */
!                 switch (name) {
!                 case IP_TOS:
!                 case T_IP_TOS:
!                 case IP_TTL:
!                 case IP_DONTFRAG:
!                         break;
!                 default:
                          return (EINVAL);
+                 }
+         } else if (connp->conn_family != AF_INET) {
+                 return (EINVAL);
+         }
  
          switch (name) {
          case IP_TTL:
                  /* Don't allow zero */
                  if (*i1 < 1 || *i1 > 255)