Diff for /embedaddon/istgt/src/istgt.h between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 16:42:02 version 1.1.1.2, 2012/10/09 09:13:23
Line 1 Line 1
 /*  /*
 * Copyright (C) 2008-2011 Daisuke Aoyama <aoyama@peach.ne.jp>. * Copyright (C) 2008-2012 Daisuke Aoyama <aoyama@peach.ne.jp>.
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 51 Line 51
 #include "istgt_log.h"  #include "istgt_log.h"
 #include "istgt_conf.h"  #include "istgt_conf.h"
   
   #if !defined(__GNUC__)
   #undef __attribute__
   #define __attribute__(x)
   #endif
   #if defined(__GNUC__) && defined(__GNUC_MINOR__)
   #define ISTGT_GNUC_PREREQ(ma,mi) \
           (__GNUC__ > (ma) || (__GNUC__ == (ma) && __GNUC_MINOR__ >= (mi)))
   #else
   #define ISTGT_GNUC_PREREQ(ma,mi) 0
   #endif
   
 #define MAX_TMPBUF 1024  #define MAX_TMPBUF 1024
 #define MAX_ADDRBUF 64  #define MAX_ADDRBUF 64
 #define MAX_INITIATOR_ADDR (MAX_ADDRBUF)  #define MAX_INITIATOR_ADDR (MAX_ADDRBUF)
Line 63 Line 74
 #define MAX_PORTAL 1024  #define MAX_PORTAL 1024
 #define MAX_INITIATOR 256  #define MAX_INITIATOR 256
 #define MAX_NETMASK 256  #define MAX_NETMASK 256
   #define MAX_PORTAL_GROUP 4096
 #define MAX_INITIATOR_GROUP 4096  #define MAX_INITIATOR_GROUP 4096
 #define MAX_LOGICAL_UNIT 4096  #define MAX_LOGICAL_UNIT 4096
 #define MAX_R2T 256  #define MAX_R2T 256
Line 77 Line 89
 #define DEFAULT_MEDIADIRECTORY BUILD_VAR_ISTGT  #define DEFAULT_MEDIADIRECTORY BUILD_VAR_ISTGT
 #define DEFAULT_NODEBASE "iqn.2007-09.jp.ne.peach.istgt"  #define DEFAULT_NODEBASE "iqn.2007-09.jp.ne.peach.istgt"
 #define DEFAULT_PORT 3260  #define DEFAULT_PORT 3260
#define DEFAULT_MAX_SESSIONS 16#define DEFAULT_MAX_SESSIONS 32
 #define DEFAULT_MAX_CONNECTIONS 4  #define DEFAULT_MAX_CONNECTIONS 4
 #define DEFAULT_MAXOUTSTANDINGR2T 16  #define DEFAULT_MAXOUTSTANDINGR2T 16
 #define DEFAULT_DEFAULTTIME2WAIT 2  #define DEFAULT_DEFAULTTIME2WAIT 2
Line 90 Line 102
 #define DEFAULT_DATAPDUINORDER 1  #define DEFAULT_DATAPDUINORDER 1
 #define DEFAULT_DATASEQUENCEINORDER 1  #define DEFAULT_DATASEQUENCEINORDER 1
 #define DEFAULT_ERRORRECOVERYLEVEL 0  #define DEFAULT_ERRORRECOVERYLEVEL 0
#define DEFAULT_TIMEOUT 30#define DEFAULT_TIMEOUT 60
 #define DEFAULT_NOPININTERVAL 20  #define DEFAULT_NOPININTERVAL 20
 #define DEFAULT_MAXR2T 16  #define DEFAULT_MAXR2T 16
   
#define ISTGT_PG_TAG_MAX 0x0000ffffU#define ISTGT_PG_TAG_MAX 0x0000ffff
#define ISTGT_LU_TAG_MAX 0x0000ffffU#define ISTGT_LU_TAG_MAX 0x0000ffff
#define ISTGT_UC_TAG     0x00010000U#define ISTGT_UC_TAG     0x00010000
 #define ISTGT_IOBUFSIZE (2 * 1024 * 1024)  #define ISTGT_IOBUFSIZE (2 * 1024 * 1024)
 #define ISTGT_SNSBUFSIZE 4096  #define ISTGT_SNSBUFSIZE 4096
 #define ISTGT_SHORTDATASIZE 8192  #define ISTGT_SHORTDATASIZE 8192
Line 115 Line 127
 #endif  #endif
 #if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__)  #if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__)
 #define ISTGT_USE_KQUEUE  #define ISTGT_USE_KQUEUE
   #if defined (__FreeBSD__)
   #define ISTGT_EV_SET(kevp,a,b,c,d,e,f) EV_SET((kevp),(a),(b),(c),(d),(e),(void *)(f))
   #elif defined (__NetBSD__)
   #define ISTGT_EV_SET(kevp,a,b,c,d,e,f) EV_SET((kevp),(a),(b),(c),(d),(e),(intptr_t)(f))
   #else
   #define ISTGT_EV_SET(kevp,a,b,c,d,e,f) EV_SET((kevp),(a),(b),(c),(d),(e),(f))
 #endif  #endif
   #endif
   
 #define MTX_LOCK(MTX) \  #define MTX_LOCK(MTX) \
         do {                                                            \          do {                                                            \
Line 150  typedef struct istgt_portal_t { Line 169  typedef struct istgt_portal_t {
         char *label;          char *label;
         char *host;          char *host;
         char *port;          char *port;
           int ref;
         int idx;          int idx;
         int tag;          int tag;
         int sock;          int sock;
 } PORTAL;  } PORTAL;
 typedef PORTAL *PORTAL_Ptr;  typedef PORTAL *PORTAL_Ptr;
   
   typedef struct istgt_portal_group_t {
           int nportals;
           PORTAL **portals;
           int ref;
           int idx;
           int tag;
   } PORTAL_GROUP;
   typedef PORTAL_GROUP *PORTAL_GROUP_Ptr;
   
 typedef struct istgt_initiator_group_t {  typedef struct istgt_initiator_group_t {
         int ninitiators;          int ninitiators;
         char **initiators;          char **initiators;
         int nnetmasks;          int nnetmasks;
         char **netmasks;          char **netmasks;
           int ref;
         int idx;          int idx;
         int tag;          int tag;
 } INITIATOR_GROUP;  } INITIATOR_GROUP;
Line 183  typedef enum { Line 213  typedef enum {
   
 typedef struct istgt_t {  typedef struct istgt_t {
         CONFIG *config;          CONFIG *config;
           CONFIG *config_old;
         char *pidfile;          char *pidfile;
         char *authfile;          char *authfile;
 #if 0  #if 0
Line 193  typedef struct istgt_t { Line 224  typedef struct istgt_t {
         char *nodebase;          char *nodebase;
   
         pthread_attr_t attr;          pthread_attr_t attr;
           pthread_mutexattr_t mutex_attr;
         pthread_mutex_t mutex;          pthread_mutex_t mutex;
           pthread_mutex_t state_mutex;
           pthread_mutex_t reload_mutex;
           pthread_cond_t reload_cond;
   
         ISTGT_STATE state;          ISTGT_STATE state;
         ISTGT_SWMODE swmode;          ISTGT_SWMODE swmode;
           uint32_t generation;
           int sig_pipe[2];
           int daemon;
           int pg_reload;
   
         int nuctl_portal;          int nuctl_portal;
         PORTAL uctl_portal[MAX_UCPORTAL];          PORTAL uctl_portal[MAX_UCPORTAL];
         int nuctl_netmasks;          int nuctl_netmasks;
         char **uctl_netmasks;          char **uctl_netmasks;
   
        int nportal;        int nportal_group;
        PORTAL portal[MAX_PORTAL];        PORTAL_GROUP portal_group[MAX_PORTAL_GROUP];
         int ninitiator_group;          int ninitiator_group;
         INITIATOR_GROUP initiator_group[MAX_INITIATOR_GROUP];          INITIATOR_GROUP initiator_group[MAX_INITIATOR_GROUP];
         int nlogical_unit;          int nlogical_unit;
Line 245  int istgt_get_nintval(CF_SECTION *sp, const char *key, Line 284  int istgt_get_nintval(CF_SECTION *sp, const char *key,
 int istgt_get_intval(CF_SECTION *sp, const char *key);  int istgt_get_intval(CF_SECTION *sp, const char *key);
   
 #ifdef USE_ATOMIC  #ifdef USE_ATOMIC
static inline intstatic inline __attribute__((__always_inline__)) int
 istgt_get_state(ISTGT_Ptr istgt)  istgt_get_state(ISTGT_Ptr istgt)
 {  {
         ISTGT_STATE state;          ISTGT_STATE state;
Line 258  istgt_get_state(ISTGT_Ptr istgt) Line 297  istgt_get_state(ISTGT_Ptr istgt)
 #endif  #endif
         return state;          return state;
 }  }
static inline voidstatic inline __attribute__((__always_inline__)) void
 istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state)  istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state)
 {  {
 #if defined HAVE_ATOMIC_STORE_REL_INT  #if defined HAVE_ATOMIC_STORE_REL_INT
Line 272  istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state) Line 311  istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state)
 #error "no atomic operation"  #error "no atomic operation"
 #endif  #endif
 }  }
#else#elif defined (USE_GCC_ATOMIC)
static inline int/* gcc >= 4.1 builtin functions */
 static inline __attribute__((__always_inline__)) int
 istgt_get_state(ISTGT_Ptr istgt)  istgt_get_state(ISTGT_Ptr istgt)
 {  {
         ISTGT_STATE state;          ISTGT_STATE state;
        MTX_LOCK(&istgt->mutex);        state = __sync_fetch_and_add((unsigned int *)&istgt->state, 0);
         return state;
 }
 static inline __attribute__((__always_inline__)) void
 istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state)
 {
         ISTGT_STATE state_old;
         do {
                 state_old = __sync_fetch_and_add((unsigned int *)&istgt->state, 0);
         } while (__sync_val_compare_and_swap((unsigned int *)&istgt->state,
                 state_old, state) != state_old);
 #if defined (HAVE_GCC_ATOMIC_SYNCHRONIZE)
         __sync_synchronize();
 #endif
 }
 #else /* !USE_ATOMIC && !USE_GCC_ATOMIC */
 static inline __attribute__((__always_inline__)) int
 istgt_get_state(ISTGT_Ptr istgt)
 {
         ISTGT_STATE state;
         MTX_LOCK(&istgt->state_mutex);
         state = istgt->state;          state = istgt->state;
        MTX_UNLOCK(&istgt->mutex);        MTX_UNLOCK(&istgt->state_mutex);
         return state;          return state;
 }  }
   
static inline voidstatic inline __attribute__((__always_inline__)) void
 istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state)  istgt_set_state(ISTGT_Ptr istgt, ISTGT_STATE state)
 {  {
        MTX_LOCK(&istgt->mutex);        MTX_LOCK(&istgt->state_mutex);
         istgt->state = state;          istgt->state = state;
        MTX_UNLOCK(&istgt->mutex);        MTX_UNLOCK(&istgt->state_mutex);
 }  }
 #endif /* USE_ATOMIC */  #endif /* USE_ATOMIC */
   

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


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