Print this page
First attempt at further IPsec cluster cleanup
        
*** 1373,1383 ****
          /*
           * Randomly generate a proposed SPI value
           */
          (void) random_get_pseudo_bytes((uint8_t *)&newspi, sizeof (uint32_t));
          newbie = sadb_getspi(ksi, newspi, &diagnostic,
!             espstack->ipsecesp_netstack, IPPROTO_ESP);
  
          if (newbie == NULL) {
                  sadb_pfkey_error(espstack->esp_pfkey_q, mp, ENOMEM, diagnostic,
                      ksi->ks_in_serial);
                  return;
--- 1373,1383 ----
          /*
           * Randomly generate a proposed SPI value
           */
          (void) random_get_pseudo_bytes((uint8_t *)&newspi, sizeof (uint32_t));
          newbie = sadb_getspi(ksi, newspi, &diagnostic,
!             espstack->ipsecesp_netstack);
  
          if (newbie == NULL) {
                  sadb_pfkey_error(espstack->esp_pfkey_q, mp, ENOMEM, diagnostic,
                      ksi->ks_in_serial);
                  return;
*** 1566,1582 ****
  #endif
  static void
  esp_port_freshness(uint32_t ports, ipsa_t *assoc)
  {
          uint16_t remote = FIRST_16(ports);
-         uint16_t local = NEXT_16(ports);
          ipsa_t *outbound_peer;
          isaf_t *bucket;
          ipsecesp_stack_t *espstack = assoc->ipsa_netstack->netstack_ipsecesp;
  
          /* We found a conn_t, therefore local != 0. */
!         ASSERT(local != 0);
          /* Assume an IPv4 SA. */
          ASSERT(assoc->ipsa_addrfam == AF_INET);
  
          /*
           * On-the-wire rport == 0 means something's very wrong.
--- 1566,1581 ----
  #endif
  static void
  esp_port_freshness(uint32_t ports, ipsa_t *assoc)
  {
          uint16_t remote = FIRST_16(ports);
          ipsa_t *outbound_peer;
          isaf_t *bucket;
          ipsecesp_stack_t *espstack = assoc->ipsa_netstack->netstack_ipsecesp;
  
          /* We found a conn_t, therefore local != 0. */
!         ASSERT(NEXT_16(ports) != 0);
          /* Assume an IPv4 SA. */
          ASSERT(assoc->ipsa_addrfam == AF_INET);
  
          /*
           * On-the-wire rport == 0 means something's very wrong.
*** 1751,1769 ****
                          }
                  }
                  if (is_natt)
                          return (esp_fix_natt_checksums(data_mp, assoc));
  
-                 if (assoc->ipsa_state == IPSA_STATE_IDLE) {
-                         /*
-                          * Cluster buffering case.  Tell caller that we're
-                          * handling the packet.
-                          */
-                         sadb_buf_pkt(assoc, data_mp, ira);
-                         return (NULL);
-                 }
- 
                  return (data_mp);
          }
  
          esp1dbg(espstack, ("esp_in_done: esp_strip_header() failed\n"));
  drop_and_bail:
--- 1750,1759 ----
*** 3618,3629 ****
          natt_rem6 = (struct sockaddr_in6 *)(nttext_rem + 1);
  
          /* Sundry ADD-specific reality checks. */
          /* XXX STATS :  Logging/stats here? */
  
!         if ((assoc->sadb_sa_state != SADB_SASTATE_MATURE) &&
!             (assoc->sadb_sa_state != SADB_X_SASTATE_ACTIVE_ELSEWHERE)) {
                  *diagnostic = SADB_X_DIAGNOSTIC_BAD_SASTATE;
                  return (EINVAL);
          }
          if (assoc->sadb_sa_encrypt == SADB_EALG_NONE) {
                  *diagnostic = SADB_X_DIAGNOSTIC_BAD_EALG;
--- 3608,3618 ----
          natt_rem6 = (struct sockaddr_in6 *)(nttext_rem + 1);
  
          /* Sundry ADD-specific reality checks. */
          /* XXX STATS :  Logging/stats here? */
  
!         if (assoc->sadb_sa_state != SADB_SASTATE_MATURE) {
                  *diagnostic = SADB_X_DIAGNOSTIC_BAD_SASTATE;
                  return (EINVAL);
          }
          if (assoc->sadb_sa_encrypt == SADB_EALG_NONE) {
                  *diagnostic = SADB_X_DIAGNOSTIC_BAD_EALG;
*** 3788,3822 ****
   */
  static int
  esp_update_sa(mblk_t *mp, keysock_in_t *ksi, int *diagnostic,
      ipsecesp_stack_t *espstack, uint8_t sadb_msg_type)
  {
-         sadb_sa_t *assoc = (sadb_sa_t *)ksi->ks_in_extv[SADB_EXT_SA];
-         mblk_t    *buf_pkt;
-         int rcode;
- 
          sadb_address_t *dstext =
              (sadb_address_t *)ksi->ks_in_extv[SADB_EXT_ADDRESS_DST];
  
          if (dstext == NULL) {
                  *diagnostic = SADB_X_DIAGNOSTIC_MISSING_DST;
                  return (EINVAL);
          }
  
!         rcode = sadb_update_sa(mp, ksi, &buf_pkt, &espstack->esp_sadb,
!             diagnostic, espstack->esp_pfkey_q, esp_add_sa,
!             espstack->ipsecesp_netstack, sadb_msg_type);
! 
!         if ((assoc->sadb_sa_state != SADB_X_SASTATE_ACTIVE) ||
!             (rcode != 0)) {
!                 return (rcode);
!         }
! 
!         HANDLE_BUF_PKT(esp_taskq, espstack->ipsecesp_netstack->netstack_ipsec,
!             espstack->esp_dropper, buf_pkt);
! 
!         return (rcode);
  }
  
  /* XXX refactor me */
  /*
   * Delete a security association.  This is REALLY likely to be code common to
--- 3777,3797 ----
   */
  static int
  esp_update_sa(mblk_t *mp, keysock_in_t *ksi, int *diagnostic,
      ipsecesp_stack_t *espstack, uint8_t sadb_msg_type)
  {
          sadb_address_t *dstext =
              (sadb_address_t *)ksi->ks_in_extv[SADB_EXT_ADDRESS_DST];
  
          if (dstext == NULL) {
                  *diagnostic = SADB_X_DIAGNOSTIC_MISSING_DST;
                  return (EINVAL);
          }
  
!         return (sadb_update_sa(mp, ksi, &espstack->esp_sadb, diagnostic,
!             espstack->esp_pfkey_q, esp_add_sa, espstack->ipsecesp_netstack,
!             sadb_msg_type));
  }
  
  /* XXX refactor me */
  /*
   * Delete a security association.  This is REALLY likely to be code common to
*** 3953,3963 ****
                  }
                  /* else esp_add_sa() took care of things. */
                  break;
          case SADB_DELETE:
          case SADB_X_DELPAIR:
-         case SADB_X_DELPAIR_STATE:
                  error = esp_del_sa(mp, ksi, &diagnostic, espstack,
                      samsg->sadb_msg_type);
                  if (error != 0) {
                          sadb_pfkey_error(espstack->esp_pfkey_q, mp, error,
                              diagnostic, ksi->ks_in_serial);
--- 3928,3937 ----