Diff for /embedaddon/ipsec-tools/src/libipsec/pfkey.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 22:39:10 version 1.1.1.2, 2014/06/15 16:37:11
Line 1 Line 1
/*      $NetBSD: pfkey.c,v 1.21 2011/01/20 16:08:35 vanhu Exp $  *//*      $NetBSD: pfkey.c,v 1.21.2.1 2011/11/14 13:25:06 tteras Exp $  */
   
 /*      $KAME: pfkey.c,v 1.47 2003/10/02 19:52:12 itojun Exp $  */  /*      $KAME: pfkey.c,v 1.47 2003/10/02 19:52:12 itojun Exp $  */
   
Line 1783  int Line 1783  int
 pfkey_open(void)  pfkey_open(void)
 {  {
         int so;          int so;
        int bufsiz = 128 * 1024;   /*is 128K enough?*/        int bufsiz_current, bufsiz_wanted;
         int ret;
         socklen_t len;
   
         if ((so = socket(PF_KEY, SOCK_RAW, PF_KEY_V2)) < 0) {          if ((so = socket(PF_KEY, SOCK_RAW, PF_KEY_V2)) < 0) {
                 __ipsec_set_strerror(strerror(errno));                  __ipsec_set_strerror(strerror(errno));
Line 1794  pfkey_open(void) Line 1796  pfkey_open(void)
          * This is a temporary workaround for KAME PR 154.           * This is a temporary workaround for KAME PR 154.
          * Don't really care even if it fails.           * Don't really care even if it fails.
          */           */
        (void)setsockopt(so, SOL_SOCKET, SO_SNDBUF, &bufsiz, sizeof(bufsiz));        /* Try to have 128k. If we have more, do not lower it. */
        (void)setsockopt(so, SOL_SOCKET, SO_RCVBUF, &bufsiz, sizeof(bufsiz));        bufsiz_wanted = 128 * 1024;
        bufsiz = 256 * 1024;        len = sizeof(bufsiz_current);
        (void)setsockopt(so, SOL_SOCKET, SO_RCVBUF, &bufsiz, sizeof(bufsiz));        ret = getsockopt(so, SOL_SOCKET, SO_SNDBUF,
        bufsiz = 512 * 1024;                &bufsiz_current, &len);
        (void)setsockopt(so, SOL_SOCKET, SO_RCVBUF, &bufsiz, sizeof(bufsiz));        if ((ret < 0) || (bufsiz_current < bufsiz_wanted))
        bufsiz = 1024 * 1024;                (void)setsockopt(so, SOL_SOCKET, SO_SNDBUF,
        (void)setsockopt(so, SOL_SOCKET, SO_RCVBUF, &bufsiz, sizeof(bufsiz));                        &bufsiz_wanted, sizeof(bufsiz_wanted));
 
         /* Try to have have at least 2MB. If we have more, do not lower it. */
         bufsiz_wanted = 2 * 1024 * 1024;
         len = sizeof(bufsiz_current);
         ret = getsockopt(so, SOL_SOCKET, SO_RCVBUF,
                 &bufsiz_current, &len);
         if (ret < 0)
                 bufsiz_current = 128 * 1024;
 
         for (; bufsiz_wanted > bufsiz_current; bufsiz_wanted /= 2) {
                 if (setsockopt(so, SOL_SOCKET, SO_RCVBUF,
                                 &bufsiz_wanted, sizeof(bufsiz_wanted)) == 0)
                         break;
         }
 
         __ipsec_errcode = EIPSEC_NO_ERROR;          __ipsec_errcode = EIPSEC_NO_ERROR;
         return so;          return so;
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>